2274|0

1297

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

【Atmel SAM R21创意大赛周计划】03 TC+ADC+PWM更新 [复制链接]

原计划做的是一个无线音频传输,基本架构是一个R21定时采集声音电压,然后通过无线发送到接收端;接收端R21也是定时利用接收缓冲里面的数据,去更新pwm的占空比,从而实现一个无线声音传输的效果(谁让R21没有DAC呢)。


整个过程分为两个步骤进行,一个是本地的ADC定时采集,然后直接去更新同一块R21上的PWM占空比;第二部是把验证好ADC和PWM分拆到两个模块,用无线连接,就搞定了。首先来完成第一部分。


有ASF的话,这些过程还简单的呢,添加TC、TCC和ADC模块。其中TC和ADC使用callback,TCC使用poll。由于采样频率和PWM频率是独立的,所以用了TC+TCC。

然后就是参照asf文档来配置各个模块了。首先是TC。使用GCLK_GENERATOR_0,8bit模式。系统默认上电使用的是8M的RC晶振。做8分频,周期125,正好得到8K的时钟,通过io口翻转验证通过。

然后把adc_read_buffer_job(&adc_instance, &result, 1)添加到tc的callback函数中,就实现了定时采集ADC了。adc配置如下。使用1/2VCC做参考,但是输入有1/2gain,其实可测范围就是从0-3.3V。

不过调试定时器+ADC的时候却发现,虽然ADC的采集时间在8M下大概是26us,可是8K的频率去采样(周期有125us呢)却没法成功,只要降低频率到2K左右就可以。所以为了加快ADC速度,又使用了一个clock manage模块。但是利用asf文档所说的例程去设定48M的时候,却只得到了28.8M的运行频率,一直没有找到原因。不过也凑合能用。设定是64分频,period=57的时候,可以得到8K的时钟。这时候采集正常。


接下来就是把tcc_set_compare_value(&tcc_instance,CONF_PWM_CHANNEL,result);放到adc的callback中,adc转换一完成,就根据采集到的数据区更改PWM的占空比,为了和ADC采集8位匹配,PWM的counter.period 设为0xFF。其他使用默认配置。

需要说明的是,asf例程文档中,pwm的宏定义是注释掉的这些,其实是不对的,应该改成上面那5行。其实这个也可以在附近的文档找到。

最后烧写进去,先利用一个电位器代替输入信号,可以发现PWM能够根据输入电压的变化动作。明天上信号发生器试试。

此帖出自单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表