今日热门

4

回答

L293B电机驱动板有两个电机接口分别由串口4567控制,这样一来就没有接地线和vcc的线了。

xmj 2017-08-25 阅读:1195

3

回答

  问题: 如何让这两份arduino代码合成为一份且能达到两份分别独立工作的效果?我有的开发板:UNO,mega2560,Due.  项目描述:目前再做一个用arduino作为主控的正弦波逆变器,第一部分电路用arduino产生占空比互补的两路Pwm通过驱动电路给Mosfet经过变压器实现dc12v to dc350v的效果,第二部分电路dc350v输入到由另外两路互补sin码pwm控制H桥逆变逆变电路,经过变压器滤波后出来一个波形很好的正弦波。两部分电路经过两份Pwm产生的代码仿真结果均达到预期结果。  问题描述: 目前有两份代码,第一份是用定时器控制9,10引脚输出电平相反的pwm波。如图   第二份是用定时器控制5,6引脚输出通过频率计算sin数组的pwm波,经过H桥逆变成为正弦波,如图但是两份代码好像都用到了定时器1,当他们一起工作时仅仅只有第5脚输出了之前单独测试的波形,因为本人水平有限,没能搞清这两份代码之间具体的冲突细节在哪,想请各位能够帮忙修改一下代码,使两份能合成为一份能输出4路电路需要的pwm波从而使电路能够正常工作达到12v直流电逆变为220v50Hz正弦交流电的目的​,开发板可以从我有的三种里任选(如果UNO满足不了硬件需要的话),如果实在不能用一个处理器来完成这些事的话能否采用双处理器的方式来完成?第一份代码#include <TimerOne.h> //#include "TimerOne.h" // include TimerOne.h #define low_battery_voltage 10.2 // define high battery voltage limit as 14.2 #define high_battery_voltage 14.4 // define low battery voltage limit as 10.2 int dutycycle = 0; // Initailize duty cylce variable as integer data type int sense_value =0; // Initialize sense_value variable to capture the adc reading of battery voltage (range from 0 to 1023) float battery_voltage = 0.0; // Initialize battery_voltage variable as a float data type to convert sense_value to actual battery voltage void battery_voltage_measurement() // battery_voltage_measurement function starts { sense_value = (analogRead(A0)); // read battery voltage on pin A0 & capture that value in sense_value variable // {warning - arduino pin accept only upto 5v so don't forget to map upper // battery volatge i.e 14.2v to 5v using voltage divider resistor network} battery_voltage = sense_value * (14.4/1023.0); // convert sense_value (0 to 1023) to range (0 to 14.2) if(battery_voltage < 14.4 && battery_voltage > 10.2) // if battery voltage is under limit i.e between 10.2 and 14.2 then dutycycle will be 150 { dutycycle = 512; } else if(battery_voltage < 10.2 || battery_voltage > 14.4) // if battery voltage is below 10.2v or above 14.2v , { dutycycle = 512; //set the duty cycle to 0 and inverter will go in cutoff mode } } // battery_voltage_measurement function ends void setup() // Setup function { pinMode (1,OUTPUT); // set pin 9 as an output pin for pwm pinMode (1,OUTPUT); // set pin 10 as an output pin for pwm Timer1.initialize(20000); // Initailize timer1 time period as 20 milli second (50 Hz frequency) Timer1.attachInterrupt(battery_voltage_measurement); // battery_voltage_measurement function will be executed every 20 milli second using timer 1 overflow interrupt TCCR1A = (TCCR1A & 0x0F) | 0xB0 ; // set pin 10 inverted of pin 9 } void loop() // loop function starts { Timer1.pwm(9,dutycycle,20000); // Timer1.pwm function takes argument as (pin no. , dutycycle , time period) Timer1.pwm(10,1023-dutycycle,20000); } // loop function ends第二份代码int i=0; int x=0; int OK=0; int sinPWM[]={1,2,5,7,10,12,15,17,19,22,24,27,30,32,34,37,39,42, 44,47,49,52,54,57,59,61,64,66,69,71,73,76,78,80,83,85,88,90,92,94,97,99, 101,103,106,108,110,113,115,117,119,121,124,126,128,130,132,134,136,138,140,142,144,146, 148,150,152,154,156,158,160,162,164,166,168,169,171,173,175,177,178,180,182,184,185,187,188,190,192,193, 195,196,198,199,201,202,204,205,207,208,209,211,212,213,215,216,217,219,220,221,222,223,224,225,226,227, 228,229,230,231,232,233,234,235,236,237,237,238,239,240,240,241,242,242,243,243,244,244,245,245,246,246, 247,247,247,248,248,248,248,249,249,249,249,249,250,250,250,250,249,249,249,249,249,248, 248,248,248,247,247,247,246,246,245,245,244,244,243,243,242,242,241,240,240,239,238,237,237,236,235,234, 233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,217,216,215,213,212,211,209,208,207,205,204, 202,201,199,198,196,195,193,192,190,188,187,185,184,182,180,178,177,175,173,171,169,168,166,164,162,160, 158,156,154,152,150,148,146,144,142,140,138,136,134,132,130,128,126,124,121,119,117,115,113,110,108,106, 103,101,99,97,94,92,90,88,85,83,80,78,76,73,71,69,66,64,61,59,57,54,52,49,47,44,42,39,37,34,32,30, 27,24,22,19,17,15,12,10,7,5,2,1}; //First value is 1 because we want to reduce the dead time betwen half cycles of sine signal. //To write the duty cycles we will use OCR0A and OCR0B for timer 0(pins 5 and 6), that means for one half cycle OCR0A will be equal with every component of vector myPWM and for other half cycle OCR0B will do that-see the post with Timer 0. //With the program below we generate phase correct signal at a 31372 Hz and 100 duty cycle(is between 0 and 255 on Timer 0). void setup() { pinMode(5, OUTPUT); pinMode(6,OUTPUT); cli();// stop interrupts TCCR0A=0;//reset the value TCCR0B=0;//reset the value TCNT0=0;//reset the value //0b allow me to write bits in binary TCCR0A=0b10100001;//phase correct pwm mode TCCR0B=0b00000001; //no prescaler TCCR1A=0;//reset the value TCCR1B=0;//reset the value TCNT1=0;//reset the value OCR1A=509;// compare match value TCCR1B=0b00001001; //WGM12 bit is 1 and no prescaler TIMSK1 |=(1 << OCIE1A); sei();// enable interrupts } ISR(TIMER1_COMPA_vect){// interrupt when timer 1 match with OCR1A value if(i>313 && OK==0){// final value from vector for pin 6 i=0;// go to first value of vector OK=1;//enable pin 5 } if(i>313 && OK==1){// final value from vector for pin 5 i=0;//go to firs value of vector OK=0;//enable pin 6 } x=sinPWM[i];// x take the value from vector corresponding to position i(i is zero indexed) i=i+1;// go to the next position if(OK==0){ OCR0B=0;//make pin 5 0 OCR0A=128;//enable pin 6 to corresponding duty cycle } if(OK==1){ OCR0A=0;//make pin 6 0 OCR0B=128;//enable pin 5 to corresponding duty cycle } } void loop() { }

劳特伦 2017-08-08 阅读:1944

5

回答

同学的arduino在他笔记本装不上驱动win7 64,我也没看出来,试了网上几种方法都不行请教了GOU T大神..请各位帮忙看看

qq1328512480 2017-08-08 阅读:1144

6

回答

朋友的一个国产知名品牌的 Arduino 用着用着程序就不对了,然后想重新烧程序,失败。再试着重新烧 Bootloader, 烧了几次才提示成功,但是,仍然不能正常用 Arduino 烧程序。返厂之后,被判断是 Mega328P 芯片损坏。买了一个直插芯片,替换掉旧的芯片。烧 Bootloader,再用 Arduino 烧程序,就一切正常了。想问一问大家,是否也有遇到过 Mega328P 芯片突然就自己坏了的情况呢?

crustycrab 2017-08-04 阅读:2101

1

回答

2

回答

如题,在arduino的apm特殊版和vs下均编译失败,提示库编译失败。网上说需要将他的库在wndows下重新编译一遍,因为之前是在ubuntu下编译的,但是具体怎么进行呢?

劳特伦 2017-07-28 阅读:964

3

回答

arduino板与舵机和红外避障模块结合,外接在S4A上,实现红外模块触发舵机与S4A舞台上虚拟起落杆运动,是否是先在arduino里烧录舵机和红外的代码,再到S4A进行编程

crustycrab 2017-07-21 阅读:1255

7

回答

如题,想学习一下arduino,有什么好的入门方法

f4e50d702719d289 2017-07-20 阅读:922

3

回答

我想在arduino编程中获得蓝牙此时的rssi值,然后赋给一个数,拿来调用完成相应的命令,怎么获取这个rssi值,有什么库文件吗?还是怎么办?谢谢啦

mingming 2017-07-18 阅读:2094

7

回答
求大佬帮忙 Arduino

Arduino初学者,现在卡在一个小问题上,求大神帮帮忙。我看了教程发现读取模拟电压的情况只有读取一个模拟电压

crustycrab 2017-07-17 阅读:681

7

回答

使用手机电池加升压板接VIN和GND来供电,由于使用了一个语音模块,每次刚播放声音的就导致系统重启,只去掉喇叭又能重新工作,使用USB供电就没出现过问题,是因为供电不足导致的吗???

crustycrab 2017-07-13 阅读:1259

8

回答

我在我的树莓派上用flask搭建了一个服务器,放上了自己的网页,开放在80端口。但是我树莓派连接的是寝室的WiFi,并没有公网IP。我有阿里云的服务器,可以通过反向SSH的方法从外网登陆树莓派操作。我现在是可以通过先登陆树莓派,再利用localhost:80的地址访问我的网页.但是我想能不能直接在外网通过输入网址访问。我试过远程端口转发将树莓派的80端口和云服务器的端口绑定,再输入 云服务器IP:80 ,但是好像并不能通过这样访问。所以,谁知道能有什么好的方法?

t 2017-07-10 阅读:1422

8

回答

求大神推荐哪种款号可以使用

crustycrab 2017-07-09 阅读:2031

2

回答

millis函数精度太低,要最好达到微秒级,有什么好办法?我只有一个办法:利用delayMicroseconds延迟。

crustycrab 2017-07-01 阅读:1044

7

回答

Ethernet W5100,Mega2560,TFT屏,还有一些常见电子零件等

crustycrab 2017-06-19 阅读:948

5

回答

用L298N按键控制电机正反转,以下代码已能够实现,按一下正转,按一下反转,现在出现的问题是,if语句会造成开机就正转,如何实现通电开机电机不转,按下按键才正转?在此求助大家,十分感谢![kenrobot_code]#define BUTTON 2    //定义按钮开关引脚为12int input1 = 5; // 定义uno的pin 5 向 input1 输出   int input2 = 6; // 定义uno的pin 6 向 input2 输出 int val = 0;        //变量val用来储存按钮状态int old_val = 0;    //暂存val变量的上一个时间单位int state = 0;       //0表示关闭,1表示打开void setup(){  pinMode (BUTTON,INPUT);   //设定按钮引脚为输入状态  pinMode(input1,OUTPUT);    pinMode(input2,OUTPUT); }void loop(){  val = digitalRead(BUTTON); //读取按钮状态并储存   //检查按钮的变化情况    if((val == HIGH)&&(old_val == LOW))    {    state =1-state;    delay(20);              //延时简单抗抖动     }     old_val = val;            //val下载已经是旧的了,让我们暂存一下    if (state == 1)     {      //电机正转    digitalWrite(input1,HIGH); //给高电平    digitalWrite(input2,LOW);  //给低电平          }    else     {       //电机反转    digitalWrite(input1,LOW); //给高电平       digitalWrite(input2,HIGH);  //给低电平       }  

crustycrab 2017-06-05 阅读:1205

5

回答

刚接触arduino,要求做激光雕刻,ide上怎么写代码可以控制2个步进电机走的线路是正方形?

crustycrab 2017-06-04 阅读:982

2

回答

github源码地址:https://github.com/squix78/esp8266-oled-ssd1306库的相关使用说明:https://github.com/squix78/esp8266-oled-ssd1306/blob/master/README.md用的这个库里面的example里的SSD1306DrawingDemo例子给nodemcu烧录,oled无任何显示,主函数里加闪灯函数验证过程序的确是烧进去了,但是Oled不亮,请问要怎么使用才能让oled能有正确显示,我用的普通的SSC1306oled连线没有错误,oled用arduino板子测试过正常,iic地址是0x3c。但是到了nodemcu程序编译通过,上传也成功,就是Oled无显示,要怎么办。。。(注意是用arduino ide烧录给nodemcu驱动oled,oled无显示)

劳特伦 2017-06-02 阅读:2583

6

回答

如何使用无线模块控制arduino板子播放视频??

crustycrab 2017-06-02 阅读:1424

8

回答

最好是不用花太多钱的

crustycrab 2017-05-31 阅读:1608
  • 帮助人数
  • 0
  • 获得赞数
  • 0
  • 一周积分
  • 0

问题达人换一批

本月问答

排名
用户名
问答积分
< >