完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
使用51单片机,和L298,编程实现用单片机输出的脉冲驱动四相步进电机。我使用的是proteus仿真,电机能按要求运行,但是,在半步运行状态下单片机输出的波形不是标准的脉冲波形(矩形波),给人失真的感觉。仿真出来的波形见下图。到目前为止,我仍没有想出来是哪出问题。求教各位。谢谢!
程序代码: #include ***it m_a=P2^0; ***it m_b=P2^1; ***it m_c=P2^2; ***it m_d=P2^3; ***it stop=P0^1; ***it run=P0^2; ***it zheng_zhuan=P0^3; ***it fan_zhuan=P0^4; ***it zheng_bu=P0^5; ***it ban_bu=P0^6; unsigned int time; unsigned int total_tim=2000; void main() { while(1) { if(run==1 && stop!=1) //启动按钮按下,开始运行 { if(zheng_zhuan==1 && fan_zhuan!=1 && zheng_bu==1 && ban_bu!=1) //正转整步 { time++; if(time==total_tim+1) {time=0;} if(time==1 * total_tim/4) {m_a=1;m_b=1;m_c=0;m_d=0;} //A.B相得电 if(time==2 * total_tim/4) {m_a=0;m_b=1;m_c=1;m_d=0;} if(time==3 * total_tim/4) {m_a=0;m_b=0;m_c=1;m_d=1;} if(time==total_tim) {m_a=1;m_b=0;m_c=0;m_d=1;} } else if(zheng_zhuan==1 && fan_zhuan!=1 && ban_bu==1 && zheng_bu!=1) //正转半步 { time++; if(time==total_tim+1) {time=0;} if(time==1 * total_tim/8) {m_a=1;m_b=0;m_c=0;m_d=0;} if(time==2 * total_tim/8) {m_a=1;m_b=1;m_c=0;m_d=0;} if(time==3 * total_tim/8) {m_a=0;m_b=1;m_c=0;m_d=0;} if(time==4 * total_tim/8) {m_a=0;m_b=1;m_c=1;m_d=0;} if(time==5 * total_tim/8) {m_a=0;m_b=0;m_c=1;m_d=0;} if(time==6 * total_tim/8) {m_a=0;m_b=0;m_c=1;m_d=1;} if(time==7 * total_tim/8) {m_a=0;m_b=0;m_c=0;m_d=1;} if(time==total_tim) {m_a=1;m_b=0;m_c=0;m_d=1;} } else if(zheng_zhuan!=1 && fan_zhuan==1 && zheng_bu==1 && ban_bu!=1) //反转整步 { time++; if(time==total_tim+1) {time=0;} if(time==1 * total_tim/4) {m_a=1;m_b=0;m_c=0;m_d=1;} if(time==2 * total_tim/4) {m_a=0;m_b=0;m_c=1;m_d=1;} if(time==3 * total_tim/4) {m_a=0;m_b=1;m_c=1;m_d=0;} if(time==total_tim) {m_a=1;m_b=1;m_c=0;m_d=0;} } else if(zheng_zhuan!=1 && fan_zhuan==1 && zheng_bu!=1 && ban_bu==1) //反转半步 { time++; if(time==total_tim+1) {time=0;} if(time==1 * total_tim/8) {m_a=1;m_b=0;m_c=0;m_d=1;} if(time==2 * total_tim/8) {m_a=0;m_b=0;m_c=0;m_d=1;} if(time==3 * total_tim/8) {m_a=0;m_b=0;m_c=1;m_d=1;} if(time==4 * total_tim/8) {m_a=0;m_b=0;m_c=1;m_d=0;} if(time==5 * total_tim/8) {m_a=0;m_b=1;m_c=1;m_d=0;} if(time==6 * total_tim/8) {m_a=0;m_b=1;m_c=0;m_d=0;} if(time==7 * total_tim/8) {m_a=1;m_b=1;m_c=0;m_d=0;} if(time==total_tim) {m_a=1;m_b=0;m_c=0;m_d=0;} } } } }
|
|
相关推荐
7 个讨论
|
|
|
请问你单片机输出脉冲输出的几路脉冲啊
|
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
4722 浏览 0 评论
5967 浏览 0 评论
PROTUES仿真no model specified for adc0809,谁有ADC0809的model?
18208 浏览 1 评论
单片机应用技术的ISIS professional电路设置仿真老是报错怎么办
18433 浏览 0 评论
21799 浏览 3 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 22:14 , Processed in 0.883061 second(s), Total 49, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3036