完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
这个程序是以前比赛时候准备的,方便用来调电机转速,也可作呼吸灯等。
IN1和IN2是控制端(电机A) ,控制高低电平可以来控制正反转。没有调速端口。一个方案是在供电端给不同pwm进行调速,可io供电能力有限,速度可能会慢。所以另一个方案就是一个输入端口给pwm,改变电平;另一端输入口给固定电平就可以进行调速。 stc12c5a60s2内部有2个pwm输出io口。根据芯片手册可知。 具体寄存器配置请多多自行参照手册。学会理解别人代码进行自学。这样才能进步。我记得这个pwm模块程序也是我上网查改的。 #include #include #define uint unsigned int #define uchar unsigned char void pwm_init() //PWM初始化函数,初始占空比为0 { CMOD=0x02; //0000 0010 空闲时不计数,不产生中断,时钟源为fosc/2,因此输出占用率为fosc/512 CL=0x00; CH=0x00; CCAPM0=0x42; //0100 0010, 8位 PWM CCAP0L=0x00; CCAP0H=0x00; //PWM实现方法,因为是8位,CL基础计数器从0xFF递减到0x00,溢出后将CCAP0H的值加载到CCAP0L,若CL递减过程中,若大于CCAP0L,则输出高电平,否则为低电平 CCAPM1=0x42; CCAP1H=0x00; CCAP1L=0x00; CR = 1; //开启PCA计数器 } void pwm_set(uchar x,uchar y) //占空比设置函数 引脚为P1.3和P1.4 { CCAP0H=x*2.55; //占空比公式D=(256-CCAPnH)/ 256(8位PWM模式) CCAP0L=x*2.55; //乘2.55转换为0-100% CCAP1H=y*2.55; CCAP1L=y*2.55; } void main() { pwm_init(); while(1) { pwm_set(0,20); //数值反放则电机方向反转 (20,0); } } |
|
|
|
只有小组成员才能发言,加入小组>>
2371 浏览 0 评论
8683 浏览 4 评论
36409 浏览 18 评论
4967 浏览 0 评论
24179 浏览 34 评论
1337浏览 2评论
1586浏览 1评论
1954浏览 1评论
1400浏览 0评论
1835浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:14 , Processed in 0.979516 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号