Я хотел бы подать увеличивающееся напряжение и удерживать мой выход Arduino UNO.Я понимаю, что arduino не позволяет мне выводить аналоговые значения, и поэтому я решил использовать лестницу R2R (с R-22 кОм и 2R-47 кОм).Это позволило бы мне преобразовать в аналоговое напряжение.Я использовал восемь цифровых выводов на Arduino, чтобы установить 8-битную лестницу R2R.Я могу вывести синусоидальную волну с моей текущей настройкой, но немного неуверен в том, как вывести волну, которая достигает максимального значения и останавливается.(то есть волна, подобная приведенной на рисунке ниже). Эта волна в основном представляет собой треугольную волну или даже синусоидальную волну, которая достигает максимального значения и остается там (с длительностью импульса 200 микросекунд).
Я создалвизуально из моей схемы, чтобы лучше продемонстрировать мою проблему:
Я также попытался мою проблему, выводя синусоидальную волну.Мой код выглядит следующим образом:
void setup() {
//set pins 0-7 as outputs
for (int i=0; i<8; i++){
pinMode(i, OUTPUT);
}
}
void loop() {
double value =0;
int check=0; int t=0;
while(check==0){
if (value<254){
value = 127+127*sin(2*3.14*t/100);
//this sends a sine wave centered around (127/255 * 5)=2.5V
//max will reach when t=25
PORTD=value;
delayMicroseconds(4); //wait 4 micro seconds
//this means that the max value will reach at ~25*6 =150 microseconds
}
else{
value =255;
PORTD=value; //just output the max of the sine wave (i.e. 255)
delayMicroseconds(50); //delay to ensure total duration is 150+50=200 microseconds
PORTD=0; //output back a 0
check=1; //condition to exit the loop
}
t=t+1;
}
}
По какой-то причине генерируемый импульс не совсем то, что я ищу.Есть ли что-то, что я делаю не так?Или есть лучшая реализация для чего-то подобного?Кроме того, если в моем вопросе что-то отсутствует, пожалуйста, дайте мне знать.