求一段430单片机输出pwm波2个IO口输出PWM控制交流电机的程序

已解决问题
急求msp430f149单片机产生pwm波控制2个电机转动的C程序
采用L298驱动两个直流电机(玩具模型小车内自带电机)
浏览次数:1850
用手机阿里扫一扫
最满意答案
哈哈,你还真找对人了。看看下面的...//pwm_timer_b.h&#ifndef&__PWM_TIMER_B&#define&__PWM_TIMER_B&void&TimerBInit();&void&SetScale(unsigned&int&sc);&void&SetFre(unsigned&int&fre);&unsigned&char&GoPwm(unsigned&char&doit);&#endif&/*******************************************************************************&文件名:pwm_timer_b.c&编写者:czhang&描述:使用定时器B进行PWM输出。输出的频率和占空比由串行口发送来的指令确定。&版本:&1.0&&*******************************************************************************/&#include&&MSP430x14x.h&&#include&&pwm_timer_b.h&&#define&PWM_DIR&P4DIR&#define&PWM_SEL&P4SEL&#define&PWM_OUT&P4OUT&#define&PWM_IN&P4IN&#define&PWM_IO&BIT1&unsigned&int&iF&//频率&unsigned&int&iS&//占空比&/*****************************************************************************&初始化定时器B&*****************************************************************************/&void&TimerBInit()&{&TBCTL&=&TBSSEL_1&+&TBCLR&;&//时钟源为ACLK&TBCCTL1&=&OUTMOD_7;&//工作在复位/置位&模式&PWM_SEL&|=&PWM_IO;&//选择输出端口的第二功能&PWM_DIR&|=&PWM_IO;&}&/*****************************************************************************&设置占空比&sc:要修改的占空比值&*****************************************************************************/&void&SetScale(unsigned&int&sc)&{&iScale=&}&/*****************************************************************************&设置频率&fre:要修改的输出频率值&*****************************************************************************/&void&SetFre(unsigned&int&fre)&{&iFre=&}&/*****************************************************************************&控制PWM运行或者停止&doit:0:停止&100:运行&其它:什么都不做,只返回运行状态&返回值:运行状态。&同doit的值&*****************************************************************************/&unsigned&char&GoPwm(unsigned&char&doit)&{&TBCTL&&=&~(MC0+MC1);&//关闭定时器&if(doit==100)&{&TBCCR1=iS&TBCCR0=iF&TBCTL&|=&MC_2;&//打开定时器,计数模式2&}&if((TBCTL&MC_0)==0)&//判断PWM是否运行&return&0;&else&return&100;&}&
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok如何使用msp430输出8路PWM波形? - 知乎10被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答45 条评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.-学路网-学习路上 有我相伴
关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.
来源:互联网 &责任编辑:李志 &
关于光耦TLP521的问题~!!1、1-2脚之间并联电阻是分流作用,防止发光二极管暗亮产生误动作。2、以TLP521-1为例,输出端为NPN型光电三极管结构,3脚为发射极,4脚为集电极,受光点为基极,接线方...关于光耦TLP521-4的接法?第一种接法正确,第二种接法有问题,在第二种接法中的发射极要通过电阻下拉接地才对。第一种接法叫上拉;第二种接法叫下拉;第一种接法先把电平拉高,然后单片机P1.0输出低...光耦P521导通的问题电阻还可以稍微换大一些,不超过10K光耦:光耦合器(opticalcoupler,英文缩写为OC)亦称光电隔离器或光电耦合器,简称光耦。它是以光为媒介来传输电信号的器件,通常把发光器...关于光电工程专业的问题我是哈工大光电信息工程的研二的学生本科毕业后,我同学有去康佳的,去夏新的,去华为的,去友达光电的,去华硕的,也有去航天三院的……他们有的在研发部门,有的在生产线...罗技光电鼠标左健单击变双击?原因就在于内部的欧姆龙点触器的质量问题,微软曾经为了这个事情收回很多有这样问题...安装的时候难度在于弹簧片,用镊子小心多来几次即可。有些朋友直接更换的点触器,...关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.(图5)关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.(图10)关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.(图13)关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.(图16)关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.(图23)关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.&单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?我知道自己肯定画得不对.但是不知道怎么样是正确的.(图25)这是用户提出的一个学习问题,具体问题为:关于光耦的一些问题左边总线和IO口经过排阻连接,供电电压3.3V,右边总线和CD40106反相器连接,供电电压5V,但两个电压来自同一个24V电源,光耦为TLP521-1.罗技光电鼠标左健单击变双击?原因就在于内部的欧姆龙点触器的质量问题,微软曾经为了这个事情收回很多有这样问题...安装的时候难度在于弹簧片,用镊子小心多来几次即可。有些朋友直接更换的点触器,...防抓取,学路网提供内容。&光耦的作用对输入、输出电信号起隔离作用,光耦合器一般由三部分组成:光的发射、光的接收及信号放大。输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产...防抓取,学路网提供内容。单片机输出PWM波控制8路MG995舵机,工作电流最大0.8A,IO口光耦的外围电路应该如何搭建?关于光耦型号及使用1、NEC的光耦也比较多,你写的那个2sk2054不是光耦,是一个MOS管。NEC的光耦的型号都是PS为前缀的,类似PS2501之类的。2、TLP521和TLP621一般情况下可以直防抓取,学路网提供内容。学路网 www.xue63.com 学路网 www.xue63.com 鼠标反转了,我的是达尔优的牧马人鼠标,往左边变成了往上面移...出现鼠标问题大部分是鼠标自身的问题,需要到另外一台电脑做测试,首先排除鼠标自身...光电接收系统偏移,焦距没有对准、外界光线影响、透镜通防抓取,学路网提供内容。我知道自己肯定画得不对.但是不知道怎么样是正确的.光电鼠标光标箭头往左移往右不灵,上下移动好使,怎么回事?怎...这个问题我遇见过、就是硬件坏了、2011年防抓取,学路网提供内容。我们通过互联网以及本网用户共同努力为此问题提供了相关答案,以便碰到此类问题的同学参考学习,请注意,我们不能保证答案的准确性,仅供参考,具体如下:光电鼠标灯有时候亮有时候不亮可能是鼠标内部光电标灯感应问题,由于过于复杂,我又不可能过去给你看看,建议如果不是鼠标动不了就不用管他了,没那个必要,当然,如果你钱多到再去买一个咱当然不反对,我们...防抓取,学路网提供内容。用户都认为优质的答案:关于光耦,请问有接受极的Ic能达到1A的光耦吗?如果...答:输出电流能达到1A的电耦是有的,大电流输出的话只能是非线性的光耦,并且是开关量的。但如果强调必须是集电极电流Ic的话,则几乎没有。因为大电防抓取,学路网提供内容。光耦的作用就是不用电,而是用光来传递信号,以解决电气的隔离,或者解决信号电平转换的问题.光耦的输出就是原来的输出,原来用什么样的外围电路,你仍然用,只不过可能对电压的高低略加改变而已.关于光耦电路的原理问:用具体电路来说明答:输入口接低电平时,二极管发光,输出三极管导通,输出端有输出。防抓取,学路网提供内容。至于你两个电源来自一个总的,那是无所谓的.如果是两个电源,它们之间就可以没有电气连接,这就会充分显示光耦的特点.但是用一个,仅仅是这一点表现不出来而已,用还是一样地用.关于光耦TLP521-4的接法?问:两种光耦的接法哪种正确,并解释!谢谢.........答:第一种接法正确,第二种接法有问题,在第二种接法中的发射极要通过电阻下拉接地才对。第一种接法叫上拉;第二种接防抓取,学路网提供内容。光耦的作用对输入、输出电信号起隔离作用,光耦合器一般由三部分组成:光的发射、光的接收及信号放大。输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产...关于光耦型号及使用1、NEC的光耦也比较多,你写的那个2sk2054不是光耦,是一个MOS管。NEC的光耦的型号都是PS为前缀的,类似PS2501之类的。2、TLP521和TLP621一般情况下可以直接...鼠标反转了,我的是达尔优的牧马人鼠标,往左边变成了往上面移...出现鼠标问题大部分是鼠标自身的问题,需要到另外一台电脑做测试,首先排除鼠标自身...光电接收系统偏移,焦距没有对准、外界光线影响、透镜通路有污染。对于发光管或光敏...光电鼠标光标箭头往左移往右不灵,上下移动好使,怎么回事?怎...这个问题我遇见过、就是硬件坏了、2011年
相关信息:
- Copyright & 2017 www.xue63.com All Rights Reserved单片机模拟输出PWM信号
[问题点数:40分]
单片机模拟输出PWM信号
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|后使用快捷导航没有帐号?
请完成以下验证码
查看: 12628|回复: 15
用普通IO口做PWM输出
在线时间11 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
本人现在想用IO口做PWM输出,频率1KHz,然后用两按键(+、-)来调节占空比0-100%,对应数码管显示000-100。
现波形是OK了,也可以调占空比,但是出现一个问题数码管显示乱七八糟,调了两天都没有调好,还请大哥们帮忙指
#include&reg52.h&#define uint&& unsigned int#define uchar unsigned charsbit up=P2^0;&&&&&& //加1按键& sbit down=P2^1;&&&& //减1按键&&& sbit pwm_out=P1^0;& //PWM输出端口&& char disp=0;&&&&&& //显示计数器 char pwm_disp=50;&& //占空比显示单元,初始化为中间值&&&&& &&&& timer0_count=100;//定时中断计数器& uchar code disp_bit[]={0xbf,0xdf,0xef}; //数码管位码 P2.4,P2.5,P2.6&&&&&& uchar code TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管段码&&&&&&& 0,1,2,3,4,5,6,7,8,9& void display();
//延时子函数& void delay(int x){&int i,j;&&&&&&&&&&& &for(i=0;i&x;i++)&for(j=1;j&120;j++);}&&&&&&&&&
//T0定时器初使化& void init(){& TMOD=0x01;&&&&&&&&& //T0方式1计时&&&&&&& & TH0=(6;& //定时10uS & TL0=(6;& EA=1;&&&&&&&&&&&&&& //总中断开&&&& & ET0=1;&&&&&&&&&&&&& //定时器0开&&&& & TR0=1;&&&& //启动定时器 }
//T0定时中断子函数& void timer0() interrupt 1 using 0{& TH0=(6;& //重置定时初值 10uS&& & TL0=(6;& if(pwm_disp==timer0_count )//占空比计数器等于定时中断计数器否& &&&&& {&&&&&&& pwm_out=1;&&&&&&& //开通输出 &&&&& }&&&&&&&& &&& & if(timer0_count==0)&& //定时中断计数器为0否&& &&&& { &&&&&& pwm_out=0;&&&&&&&& //关断输出&&&&& &&&&&& timer0_count=100;& //重置初始值 &&&& }& timer0_count--;}
//显示子函数&&& void display(){&& delay(10);&&& switch(disp)&&&&&&&&&&& &&&&& {& case 0:&&&&&&&&&& { &&&&&& P2=0&&&&&&&&&&&&&&&& //P2为位码&& &&&&&&&&&&&& P0=TABLE[pwm_disp/100];& //P0为段码&&&& &&&& &&&&&&&&&& }&&&&&&&& case 1:&&&&&&&&&& { &&&&&&&&&&&& P2=0&&&&&&& &&&&&&&&&&&& P0=TABLE[(pwm_disp%100)/10]; &&&& &&&&&&&&&& }&&&&&&&& case 2:&&&&&&&&&& {&&&&&&&&&&&& P2=0&&&&&&& &&&&&&&&&&&& P0=TABLE[pwm_disp%10];& &&&& &&&&&&&&&& }
&&&&& }& disp++;//显示计数器加1&&&& & if(disp&=3)//显示计数器等于3&&&&& &&&& disp=0; //则清零&&&& }
//主程序&& void main(){&& & init();&& while(1)&&&& { &&& if(up==0)//增1键按下否&&&& &&&&&&&& { delay(10);&&&&&&&&&&& if(up==0)&&&&&& &&&&&&&&&&&& { pwm_disp++;&&&&&&&&&&&&&& if( pwm_disp&100) &&&&&&&&&&&&&& pwm_disp=0;&&&&& if(up==0);&&&&&&&&&&&& }&&&&&&&&& } &&&&&& if(down==0)//减1键按下否&& &&&&&&&& { delay(10);&&&&&&&&&&& if(down==0)&& &&&&&&&&&&& { pwm_disp--;&&&&&&&&&&&&& if( pwm_disp==0) &&&&&&&&&&&&&& pwm_disp=100;&&&& &&&&& if(down==0);&&&&&&&&&&&& }&&&&&&&& }& }}
在线时间371 小时
威望11385分
芯币4333枚
TA的帖子TA的资源
裸片初长成(初级), 积分 11385, 距离下一级还需 8615 积分
裸片初长成(初级), 积分 11385, 距离下一级还需 8615 积分
建议好好看一下数码管显示那里,指针数组等,或者是段选位选什么的,好好看一看,显示那里应该比较简单
我爱电子!
在线时间219 小时
威望2599分
芯币1233枚
TA的帖子TA的资源
五彩晶圆(初级), 积分 2599, 距离下一级还需 901 积分
五彩晶圆(初级), 积分 2599, 距离下一级还需 901 积分
回复 楼主 wuwenlin 的帖子
你把其他函数屏蔽掉啊,然后就调试数码管看看。。。
在线时间111 小时
威望2720分
TA的帖子TA的资源
五彩晶圆(初级), 积分 2720, 距离下一级还需 780 积分
五彩晶圆(初级), 积分 2720, 距离下一级还需 780 积分
你的位码是共阴的,而你的段码是共阳的
如果你的数码管是共阴的,段码改成uchar code TABLE[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07,0x7F,0x6F};
如果你的数码管是共阳的,位码改成uchar code disp_bit[]={0x40,0x20,0x10};
在线时间11 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
我仔细检查了段码和位码都没有错啊。一开始我把显示函数放到中断里,显示程序正常,但是PWM输出的频率变成10HZ左右。拿出来频率1KHZ正常。所以请教各位大哥我应该把显示放在那里呢?
在线时间111 小时
威望2720分
TA的帖子TA的资源
五彩晶圆(初级), 积分 2720, 距离下一级还需 780 积分
五彩晶圆(初级), 积分 2720, 距离下一级还需 780 积分
原帖由 wuwenlin 于
08:35 发表
我仔细检查了段码和位码都没有错啊。一开始我把显示函数放到中断里,显示程序正常,但是PWM输出的频率变成10HZ左右。拿出来频率1KHZ正常。所以请教各位大哥我应该把显示放在那里呢?
位码断码没错?难道你输出端还加非门了?
我也没看见你在哪用了display函数呀
[ 本帖最后由 孤獨の快樂 于
10:07 编辑 ]
在线时间2100 小时
威望8440分
芯币11537枚
E金币106枚
TA的帖子TA的资源
五彩晶圆(高级), 积分 8440, 距离下一级还需 1560 积分
五彩晶圆(高级), 积分 8440, 距离下一级还需 1560 积分
先一部分一部分测试吧
在线时间69 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 158, 距离下一级还需 42 积分
一粒金砂(中级), 积分 158, 距离下一级还需 42 积分
可以考虑一下液晶,显示内容多,驱动也方便!
在线时间11 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
数码管每一位都加了PNP三极管。
我把显示放到While(1)中,显示就不行了。
如放在中断函数中显示正常,但PWM频率降到10HZ左右。
所以发贴求助,看显示放那才可以。或者在加些程序呢。。。
在线时间228 小时
芯币1188枚
TA的帖子TA的资源
一粒金砂(高级), 积分 430, 距离下一级还需 70 积分
一粒金砂(高级), 积分 430, 距离下一级还需 70 积分
以前无聊我也做过
单纯的EEer~
在线时间11 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
请大哥支招啊。。谢谢!
在线时间1521 小时
威望6458分
芯币23371枚
E金币400枚
TA的帖子TA的资源
在线时间27 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
if(up==0)//增1键按下否& &&&
& && && &{ delay(10);
& && && && &if(up==0)& && &
& && && && & { pwm_disp++;
& && && && && &if( pwm_disp&100)
& && && && && &pwm_disp=0;
& && &if(up==0);
& && && && & }
& && && & }
& && & if(down==0)//减1键按下否& &
& && && &{ delay(10);
& && && && &if(down==0)& &
& && && && &{ pwm_disp--;
& && && && &&&if( pwm_disp==0)
& && && && && &pwm_disp=100;& &&&
& && &if(down==0);
& && && && & }这段按键程序不好,一但安下按键就有问题。显示有问题if(down==0);会堵死CPU。
在线时间11 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
一粒金砂(中级), 积分 40, 距离下一级还需 160 积分
那我该如何解决呢?我现在就是出现这个问题,一直没有解决。请兄弟指点指点。。。
在线时间92 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 238, 距离下一级还需 262 积分
一粒金砂(高级), 积分 238, 距离下一级还需 262 积分
先一部分一部分测试吧
在线时间111 小时
威望2720分
TA的帖子TA的资源
五彩晶圆(初级), 积分 2720, 距离下一级还需 780 积分
五彩晶圆(初级), 积分 2720, 距离下一级还需 780 积分
if(up==0);和if(down==0);应该是while(up==0);和while(down==0);吧
试试把其它函数删了,只剩显示函数,会不会错
可以试试把pwm_disp类型改成uchar
[ 本帖最后由 孤獨の快樂 于
01:02 编辑 ]
论坛测评队员
EEWORLD 官方微信
Powered by}

我要回帖

更多关于 单片机输出电压 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信