找回密码
 立即注册
查看: 64|回复: 7

非常遗憾 搞PWM 三四天P2.2还是没有输出 | 有输出了

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-07-24 22:46:38

27

主题

86

回帖

837

积分

高级会员

积分
837
发表于 2025-7-23 13:46:48 | 显示全部楼层 |阅读模式
感谢大家都鼓励和帮助
下载了很多例程
各种控制比较复杂
寄存器非常多
一时还消化不了

目前我只想由浅入深
先把P2.0  和P2.2PWM控制电机正反转实现
程序改了又改 试了又试
搞到筋疲力尽 还是没有输出
程序先进行引脚配置
PWMA_PS |= PWM1_2;                 //选择 PWM1_2 通道
PWMA_PS |= PWM2_2;                 //选择 PWM2_2 通道

后面的EER MR寄存器还搞不懂

MOTOR.jpg
刚刚做了一块PCB板
用P2.0  P2.2分别控制电机正反转

先按照官方程序测试效果
目前只实现IO口点亮
还是不知道怎么修改参数
达到工作要求
脉冲频率和占空比可变
参考查阅寄存器 和PWM工作原理
发现PWM控制牵涉的寄存器比较多
做文档研究两三天还不是很明白      

              #include     "STC8H.h"             //
              #include     "intrins.h"           //
              #define      uchar unsigned char      //
              #define      uint  unsigned int       //
              #define      ENO1P       0x01
              #define      ENO2P       0x04
              #define      PWM1_2      0x01    //P:P2.0  N:P2.1
              #define      PWM2_2      0x04    //P:P2.2  N:P2.3
              sbit         OutPut0=P2^0;                   //
              sbit         OutPut1=P2^2;  
              uchar        SS;
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
              void Delay100ms(uint x)              //
              {
              uint i,j;
              for(i=0;i<x;i++)
              for(j=0;j<11000;j++);
              }
/*************关所有输出*******************************/            
              void Init_io()
              {
               P1M0=0X00;                        //   
               P1M1=0X00;                        //
               P2M0=0x05;
               P2M1=0x00;
               P3M0=0X00;                        //   
               P3M1=0X00;                        //
               P5M0=0X00;                        //
               P5M1=0X00;                        //
              }
/******************** 主函数 **************************/
              void main(void)
              {   
              P_SW2|=0X80;
              EA=1;
              Init_io();
              for(SS=0;SS<5;SS++)
              {
              OutPut0=0;
              OutPut1=0;
              Delay100ms(50);
              OutPut0=1;
              OutPut1=1;
              Delay100ms(50);
              }
//      
              PWMA_PS |= PWM1_2;                 //选择 PWM1_2 通道
              PWMA_PS |= PWM2_2;                 //选择 PWM2_2 通道
              PWMA_CCER1=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道
//              PWMA_CCER2=0x00;                   //写 CCMRx 前必须先清零 CCxE    关闭通道

              PWMA_CCMR1=0x60;                   //设置 PWM1 模式1 输出
              PWMA_CCMR2=0x60;                   //设置 PWM1 模式1 输出

              PWMA_CCER1=0x01;                   //使能 CC1E 通道, 高电平有效

//           PWMA_CCER2=0x01;                   //写 CCMRx 前必须先清零 CCxE    关闭通道
            
              PWMA_CCR1=100;                     //设置占空比时间
              PWMA_CCR2=100;                     //设置占空比时间
              PWMA_ARR=2000;                     //设置周期时间
              PWMA_ENO |= ENO1P; //使能输出
              PWMA_ENO |= ENO2P; //使能输出
              
              PWMA_BKR = 0x80; //使能主输出
              PWMA_CR1 |= 0x81; //ARR预装载,开始计时
              while(1)
               {
               
               }                                 //
              }                                     //

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 2025-7-23 14:57:39 | 显示全部楼层
PWMA_CCER1错误,应为0x11
截图202507231510344662.jpg
截图202507231500348595.jpg
截图202507231509293028.jpg
https://www.stcaimcu.com/forum.p ... id=19209&pid=177800
频率(PWM时钟使用SYSCLK):
截图202507231458219093.jpg
占空比:
= PWMx_CCRn / PWMx_ARR


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-07-24 22:46:38

27

主题

86

回帖

837

积分

高级会员

积分
837
发表于 2025-7-23 15:01:14 | 显示全部楼层
Debu*** 发表于 2025-7-23 14:57
https://www.stcaimcu.com/forum.p ... id=19209&pid=177800
频率(PWM时钟使用SYSCLK):

现在是目测P2.2还没有输出
P2.0有输出的

点评

PWMA_CCER1=0x11  详情 回复 发表于 2025-7-23 15:14
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 2025-7-23 15:14:59 | 显示全部楼层
天*** 发表于 2025-7-23 15:01
现在是目测P2.2还没有输出
P2.0有输出的

PWMA_CCER1=0x11
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-07-24 22:46:38

27

主题

86

回帖

837

积分

高级会员

积分
837
发表于 2025-7-23 15:18:08 | 显示全部楼层
确实 修改一下有输出了
上午参考测试了很多例程
用|=n 也试过
没有效果搞得灰头土脸
我在试试
谢谢版主

点评

仔细看数据手册  详情 回复 发表于 2025-7-23 15:34
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-07-24 22:46:38

27

主题

86

回帖

837

积分

高级会员

积分
837
发表于 2025-7-23 15:31:03 | 显示全部楼层

就是CC1E CC2E理解不明白 谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-07-31 08:58:47
已绑定手机

87

主题

5532

回帖

1万

积分

超级版主

DebugLab

积分
10123
发表于 2025-7-23 15:34:44 | 显示全部楼层
天*** 发表于 2025-7-23 15:18
确实 修改一下有输出了
上午参考测试了很多例程
用|=n 也试过

仔细看数据手册
截图202507231534571207.jpg
截图202507231539139110.jpg
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-07-24 22:46:38

27

主题

86

回帖

837

积分

高级会员

积分
837
发表于 2025-7-23 15:37:17 | 显示全部楼层
Debu*** 发表于 2025-7-23 15:34
仔细看数据手册

数据手册反反复复看了
有些BIT位的意思不是很明白
PWM的寄存器比较多
而且相互关联
只能一步一步摸索
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-1 03:41 , Processed in 0.126172 second(s), 93 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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