找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2358|回复: 6
打印 上一主题 下一主题
收起左侧

如何用51单片机同时产生六路可调频率 占空比的pwm

[复制链接]
跳转到指定楼层
楼主
ID:875693 发表于 2021-6-8 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
500黑币

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:230742 发表于 2021-6-8 19:39 | 只看该作者
可以用STC8G2K系列的单片机,有8路的,也有45路的PWM,够你用了。
51你是指89C52类的吗?如果是作 ,论坛有规定不允许回答。
如果是做项目,建议还是改用STC系列吧。选好型号,比89C52都便宜。又有各种封装。多方便。
回复

使用道具 举报

板凳
ID:328014 发表于 2021-6-8 23:51 | 只看该作者
  1. #include "include.h"

  2. void pwm_init()
  3. {

  4. P1M0|=0xc0               ;//(00000000)
  5. P1M1=0     ;//(11000000)

  6. P2M0|=0x8e                     ;//(00000000)
  7. P2M1=0           ;//(10001110)
  8. PWM2T1=0x0001;
  9. PWM2T2=0;
  10. PWM3T1=0x0001;
  11. PWM3T2=0;
  12. PWM4T1=0x0001;
  13. PWM4T2=0;
  14. PWM5T1=0x0001;
  15. PWM5T2=0;
  16. PWM6T1=0x0001;
  17. PWM6T2=0;
  18. PWM7T1=0x0001;
  19. PWM7T2=0;
  20. P_SW2=0X80;           //特殊功能寄存器位于扩展RAM区域
  21. PWMCFG=0X00;   //初始电平全低电平,不用ADC
  22. PWMCKS=0X0B;   //系统时钟12分频(11+1)
  23. PWMC=20000;           //周期20ms--20000us12M晶振12分频时钟
  24. PWMCR|=0X80;

  25. }
  26. void PWM1_control(u16 pwm)
  27. {
  28. PWM2T1=PWMC-PWM2T2;
  29. PWM2T2=pwm;                  //脉宽控制-高电平脉宽时间
  30. PWM2CR=0X08;          //输出引脚PWM2-P2.7
  31. PWMCR|=0X01;
  32. }
  33. void PWM2_control(u16 pwm)
  34. {

  35. PWM3T1=PWMC-PWM3T2;
  36. PWM3T2=pwm;                  //脉宽控制-高电平脉宽时间

  37. PWM3CR=0X00;          //输出引脚PWM2-P2.1

  38. PWMCR|=0X02;
  39. }

  40. void PWM3_control(u16 pwm)
  41. {

  42. PWM4T1=PWMC-PWM4T2;
  43. PWM4T2=pwm;                  //脉宽控制-高电平脉宽时间

  44. PWM4CR=0X00;          //输出引脚PWM2-P2.2
  45. PWMCR|=0X04;
  46. }

  47. void PWM4_control(u16 pwm)
  48. {

  49. PWM5T1=PWMC-PWM5T2;
  50. PWM5T2=pwm;                  //脉宽控制-高电平脉宽时间

  51. PWM5CR=0X00;          //输出引脚PWM2-P2.3
  52. PWMCR|=0X08;
  53. }

  54. void PWM5_control(u16 pwm)
  55. {

  56. PWM6T1=PWMC-PWM6T2;
  57. PWM6T2=pwm;                  //脉宽控制-高电平脉宽时间

  58. PWM6CR=0X00;          //输出引脚PWM2-P1.6
  59. PWMCR|=0X10;
  60. }

  61. void PWM6_control(u16 pwm)
  62. {

  63. PWM7T1=PWMC-PWM7T2;
  64. PWM7T2=pwm;                  //脉宽控制-高电平脉宽时间

  65. PWM7CR=0X00;          //输出引脚PWM2-P1.7
  66. PWMCR|=0X20;
  67. }
复制代码
回复

使用道具 举报

地板
ID:213173 发表于 2021-6-9 05:39 | 只看该作者
从原则来讲可以实现,但受51单片机自身硬件条件限制。如果要求六路pwm频率、占空比互不关联的独立调整,并且频率范围很宽、占空比范围很大实现起来有困难甚至无法实现。
回复

使用道具 举报

5#
ID:72462 发表于 2021-6-9 09:04 | 只看该作者
89C52貌似不行,可以用更高级一点的51单片机
回复

使用道具 举报

6#
ID:157057 发表于 2021-6-9 09:56 | 只看该作者
定时器就可以实现~
回复

使用道具 举报

7#
ID:875693 发表于 2021-6-10 08:24 | 只看该作者
fefen0 发表于 2021-6-9 09:56
定时器就可以实现~

怎么实现
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表