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

8G系列的PCA/CCP/PWM, 10位PWM

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-4-7 11:51:49 | 显示全部楼层
leit*** 发表于 2024-4-5 20:49
还有一点就是10位的重装值改写时必须要先关了pwm使能,然后写,再打开pwm使能,这样才能让其跟着采样值走 ...

我写个程序给你,等下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:164
  • 最近打卡:2025-01-04 18:47:02

3

主题

20

回帖

52

积分

注册会员

积分
52
发表于 2024-4-7 17:22:25 | 显示全部楼层
梁*** 发表于 2024-4-7 11:51
我写个程序给你,等下。

好的,梁工
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:164
  • 最近打卡:2025-01-04 18:47:02

3

主题

20

回帖

52

积分

注册会员

积分
52
发表于 2024-4-7 17:32:38 | 显示全部楼层
本帖最后由 leitang 于 2024-4-7 17:35 编辑
电子DI*** 发表于 2024-4-7 11:43
串口打印一下val的数值,看下到底adc的问题还是pwm的问题

冲哥,我这个adc用于7位pwm是没有问题的,应该还是pwm的问题,当然也可能是两个结合的问题
主要我这边没有串口打印,所以看不了val的值
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-4-7 17:43:36 | 显示全部楼层
leit*** 发表于 2024-4-5 19:47
void PCA_Init()
{
        CCON=0x00;  //关闭PCA计数器,清除相关标志位

你初始化ADC的程序再哪呢?没看到
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:164
  • 最近打卡:2025-01-04 18:47:02

3

主题

20

回帖

52

积分

注册会员

积分
52
发表于 2024-4-7 17:44:54 | 显示全部楼层
梁*** 发表于 2024-4-7 17:43
你初始化ADC的程序再哪呢?没看到

/*------------------------AD采样-----------------------------*/
void Get_ADC(unsigned char channel)  //channel =2~3
{
    P_SW2 |= 0x80;                              //使能访问XFR
    ADCTIM = 0x29;                              //设置ADC内部时序,达到该单片机的采样转换速率的极限500k
    P_SW2 &= 0x7f;
    ADCCFG = 0x20;                              //设置ADC时钟为内部时钟的1/2,转换右对齐

    ADC_CONTR = 0x80;                           //使能ADC模块

    ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;    //启动AD转换和adc通道选择

    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while((ADC_CONTR & 0x20) == 0);   //wait for ADC finish
    ADC_CONTR &= ~0x20;     //清除ADC结束标志

}

点评

应该分开初始化和ADC转换两个函数。每次由关闭到打开ADC电源,至少要延时1ms以上才做ADC。  详情 回复 发表于 2024-4-7 17:47
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-4-7 17:47:48 | 显示全部楼层
leit*** 发表于 2024-4-7 17:44
/*------------------------AD采样-----------------------------*/
void Get_ADC(unsigned char channel ...

应该分开初始化和ADC转换两个函数。每次由关闭到打开ADC电源,至少要延时1ms以上才做ADC。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:164
  • 最近打卡:2025-01-04 18:47:02

3

主题

20

回帖

52

积分

注册会员

积分
52
发表于 2024-4-7 19:21:21 | 显示全部楼层
梁*** 发表于 2024-4-7 17:47
应该分开初始化和ADC转换两个函数。每次由关闭到打开ADC电源,至少要延时1ms以上才做ADC。 ...

梁工,我按你的说法,加了一个延时,确实是可以了,但还是pwm还有很明显的抖动,这个如何处理




f345e3879f8ebe1b830620cb8821307c.mp4

763.31 KB, 下载次数: 80

点评

例程写好了,测试无任何问题,P1.2接电位器输入ADC2,10位ADC结果送PCA2-P3.7输出10位PWM,下载选择11.0592MHz主频的话,PWM频率就是11059200/1024=10800Hz。 用户请先别修改程序, 直接下载"ADC.hex"测试. 下载时  详情 回复 发表于 2024-4-7 23:02
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-4-7 23:02:02 | 显示全部楼层
leit*** 发表于 2024-4-7 19:21
梁工,我按你的说法,加了一个延时,确实是可以了,但还是pwm还有很明显的抖动,这个如何处理

10位PWM例程写好了,测试无任何问题,
P1.2接电位器输入ADC2,10位ADC结果送PCA2-P3.7输出10位PWM,
下载选择11.0592MHz主频的话,PWM频率就是11059200/1024=10800Hz。


用户请先别修改程序, 直接下载"ADC.hex"测试.

下载时选择主频11.0592MHZ(其它频率也可以)。
本程序演示ADC2(P1.2)接电位器并将ADC值送给

10位PWM2输出(P3.7-PCA2).

10-1路ADC读电位器-控制PCA-PWM.rar (61.25 KB, 下载次数: 259)


请看视频:





回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:164
  • 最近打卡:2025-01-04 18:47:02

3

主题

20

回帖

52

积分

注册会员

积分
52
发表于 2024-4-8 08:50:48 | 显示全部楼层
梁*** 发表于 2024-4-7 23:02
10位PWM例程写好了,测试无任何问题,
P1.2接电位器输入ADC2,10位ADC结果送PCA2-P3.7输出10位PWM,
下载 ...

好的,感谢梁工

点评

你测试正常了?  详情 回复 发表于 2024-4-8 10:09
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-4-8 10:09:03 | 显示全部楼层
leit*** 发表于 2024-4-8 08:50
好的,感谢梁工

你测试正常了?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:50 , Processed in 0.148009 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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