找回密码
 立即注册
楼主: wuzhengmin

第一次:环境的创立 | 送实验箱

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 6 天前 | 显示全部楼层
这里选择输出比较模式为:PWM模式1(向上计数)PWMn_CNT<PWMn_CCR1时,OcnRE=1

截图202510282010271072.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 6 天前 | 显示全部楼层
死区的问题先跳过:
截图202510282012003098.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 6 天前 | 显示全部楼层
26.9.17 捕获/比较使能寄存器 1(PWMx_CCER1)
截图202510282029571655.jpg
截图202510282030097244.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 6 天前 | 显示全部楼层
这里我们一定要输出的:

CCIP:OCI(OC1 通道正极》输入比较输出极性CC1 通道配置为输出:
0:高电平有效1:低电平有效
CCI通道配置为输入或者捕获:
0:捕获发生在TI1F或TI2F的上升沿;1:捕获发生在TIIF或TI2F的下降沿.
注1:一旦LOCK级别(PWMA_BKR寄存器中的LOCK位)设为3或2,则该位不能被修改。
注2:对于有互补输出的通道,该位是预装载的。如果CCPC-1(PWMA-CR2寄存器),只有在COM 事件发生时,CCIP位才从预装载位中取新值。
CCIE:OC1(OC1 通道正极)输入捕获/比较输出使能0:关闭输入捕获/比较输出;1:开启输入捕获/比较输出。
注:对于有互补输出的通道,该位是预装载的。如果CCPC-1(PWMA-CR2寄存器),只有在COM事件发生时,CCIE 位才从预装载位中取新值。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 6 天前 | 显示全部楼层
简单的总结结束今天的课程:
截图202510282047017869.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 6 天前 | 显示全部楼层
从图表上看:


截图202510282052016082.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 5 天前 | 显示全部楼层
好了,吹水这么久,能实现么?


我们把这段程序烧卤进去:


#include "pwm.h"

#define  PWMA_ARR  999
#define  PWMA_CCR  500

//========================================================================
// 函数名称: PWMA_Init_1 (void)
// 函数功能: P60端口输出一个PWM信号
// 入口参数: 无
// 函数返回: 无
// 当前版本: VER1.0
// 修改日期: 2025
// 当前作者:
// 其他备注:
// 输出频率= sysclk(22.1184nhz)/(pscr+1)/(arr+1)= 22118400/1/999+1)= 22118.4khz = 22.1184khz
// 输出占空比 = ccr/( arr+1 )*100% = 500/ ( 999+1) = 50%
//
//========================================================================
void PWMA_Init_1 (void)  //PWMA初始化
{
        //1 时钟源选择,我们用默认22.1184MHz
       
        //2 先选时基单元,选择预分频计数器不分频
       
        PWMA_PSCRH = 0 ;  //选时基单元高8位,我们先1分频
        PWMA_PSCRL = 0 ;  //选时基单元低8位,我们先1分频
       
        PWMA_ARRH = (u8)(PWMA_ARR>>8) ;  //时基最大值的高8位,从0数到999
        PWMA_ARRL = (u8)(PWMA_ARR) ;     //时基最大值的低8位
       
        PWMA_CCR1H = (u8)(PWMA_CCR>>8) ;  //捕获比较寄存器的高8位,该寄存器用来计数比较
        PWMA_CCR1L = (u8)(PWMA_CCR) ;     //捕获比较寄存器的低8位,该寄存器用来计数比较
                                                                          //0--500输出一种电平,500-999输出另一种电平
        //3 输入输出的引脚配置
       
        PWMA_ENO  = 0x00;  //使能PWM1通道输出,先清0,注意P60正好在PWM1上
        PWMA_ENO |= 0x01;  // 用P6.0脚的话PWMA_ENO最低位=1
       
        PWMA_PS  = 0x00;  // 功能脚切换寄存器先清0
        PWMA_PS |= 2<<0;  //实际是C1PS取10,对应PWM1P就是P6.0 PWM1N就是P6.1
                                          //2就是10,<<0就是不动,就是选择PWM1 从P60引脚輸出
       
        //4 输入输出模式设置
       
        PWMA_CCER1 = 0x00 ; //关闭0通道
        PWMA_CCMR1 = 0x68 ; //将其配置为PW模式1 高4位是0110,低4位是1000,写0x68
                                                //配置为输出,
        PWMA_CCER1 = 0x01 ; //开启输出比较通道
        PWMA_BKR = 0x80 ;   //主输出使能
               
        PWMA_CR1  |= 0x01 ;    //控制寄存器最低位=1就启动计数器

}


当然,我仔细观察了试验箱,也买了焊台回来,不过还是换条路走,咋们去买个屠龙刀三回来!

这样示波器就方便啦

看图:


截图202510290958063899.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 5 天前 | 显示全部楼层
来个特写:


截图202510290959086636.jpg
截图202510290959392266.jpg
截图202510291000399397.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 5 天前 | 显示全部楼层
输出频率= sysclk(22.1184nhz)/(pscr+1)/(arr+1)= 22118400/1/999+1)= 22118.4khz = 22.1184khz
// 输出占空比 = ccr/( arr+1 )*100% = 500/ ( 999+1) = 50%

而示波器的显示:

频率是22.132KHZ,Vpp是5.14V

Dut 是49.50%

当然,我们现在用玩具示波器,精度也就这样啦

截图202510291002286221.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 5 天前 | 显示全部楼层
跟着冲哥,看看下面把输出从P6.0 换到P6.2


通道由PWM1p 换到PWM2p

看源程序:


//========================================================================
// 函数名称: PWMA_Init_2 (void)
// 函数功能: P62端口输出一个PWM信号
// 入口参数: 无
// 函数返回: 无
// 当前版本: VER1.0
// 修改日期: 2025
// 当前作者:
// 其他备注:
// 输出频率= sysclk(22.1184nhz)/(pscr+1)/(arr+1)= 22118400/1/999+1)= 22118.4khz = 22.1184khz
// 输出占空比 = ccr/( arr+1 )*100% = 500/ ( 999+1) = 50%
//
//========================================================================
void PWMA_Init_2 (void)  //PWMA初始化
{
        //1 时钟源选择,我们用默认22.1184MHz,和PWMA_Init_1相同
       
        //2 先选时基单元,选择预分频计数器不分频,,和PWMA_Init_1相同
       
        PWMA_PSCRH = 0 ;  //选时基单元高8位,我们先1分频
        PWMA_PSCRL = 0 ;  //选时基单元低8位,我们先1分频
       
        PWMA_ARRH = (u8)(PWMA_ARR>>8) ;  //时基最大值的高8位,从0数到999
        PWMA_ARRL = (u8)(PWMA_ARR) ;     //时基最大值的低8位
       
        PWMA_CCR1H = (u8)(PWMA_CCR>>8) ;  //捕获比较寄存器的高8位,该寄存器用来计数比较
        PWMA_CCR1L = (u8)(PWMA_CCR) ;     //捕获比较寄存器的低8位,该寄存器用来计数比较
                                                                          //0--500输出一种电平,500-999输出另一种电平
        //3 输入输出的引脚配置,和PWMA_Init_1不相同,注意看
       
        PWMA_ENO  = 0x00;  //使能PWM2p通道输出,先清0,注意P62在PWM2p上
        PWMA_ENO |= 0x04;  // 用通道2和P6.2脚的话PWMA_ENO第三位=1,就是0x04
       
        PWMA_PS  = 0x00;  // 功能脚切换寄存器先清0
        PWMA_PS |= (2<<2);  //实际是C1PS取1000,对应PWM2p就是P6.2 (PWM2N就是P6.3)
                                          //2就是10,<<2就是1000,就是选择PWM2p 从P62引脚輸出
       
        //4 输入输出模式设置
       
        PWMA_CCER1 = 0x00 ; //关闭1通道.通道2也是由PWMA_CCER1控制,这里不变
        PWMA_CCMR2 = 0x68 ; //将其配置为PW模式1 高4位是0110,低4位是1000,写0x68 配置为输出,
        PWMA_CCER1 = 0x10 ; //开启输出比较通道2
       
        PWMA_BKR = 0x80 ;   //主输出使能
               
        PWMA_CR1  |= 0x01 ;    //控制寄存器最低位=1就启动计数器

}



回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-11-3 03:07 , Processed in 0.118619 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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