|
本帖最后由 gxg0000 于 2023-8-19 20:13 编辑
矿石机长期带耳机把玩,两耳夹的生疼,矿机带个小功放接续,能够缓解一下暂时的痛苦。
本矿机小功放模块,安装在自用矿机的内侧,它是一个独立的单元,无源收听或有源收听两不误,该单元采用单节18650锂电池供电,带欠压保护,锂电池电压降到3.2V以下,程序控制关断音量,实样见下图;
自用矿机的链接;
自用矿机
电路工作原理:
下图为矿机小功放完整的原理图
图中音频通过左上角输入,经过R1与Q1(3EQ)沟道电阻组成分压音量衰减,R4R5电阻1/2分压反馈,用于补偿3EQ沟道电阻的非线性,可以将失真率控制在1%以内。图中右上角为TDA2822M组成的桥式电路,经C4耦合到小功放输入端,喇叭上得到的最大输出功率为350MW(4欧),电路的总增益为39.2dB。
图中下半部分为单片机控制电路,U2单片机5脚输出PWM,滤波后的电压范围0-3.3V,该电压用于控制Q1场管的沟道电阻,对音量衰减的范围是29.6dB,如果将音量衰减范围扩大到40dB,PWM输出控制电压必须10V以上。
AGC电压来自矿石机班尼电路,当班尼电阻打开时,利用检波直流分量作为自动音量控制的电压,调节班尼电阻大小可以改变AGC的控制强度,自动音量控制属于开环控制,有一定的局限性。
这是小功放用PROTEUS软件仿真的情况:
正弦波1000Hz输入(黄线),经R1与场管沟道电阻分压后的波形(蓝线)
仿真电路图
ATTINY13A为8脚单片机,控制程序很简单,从3脚输入音量电位器电压,7脚输入AGC反馈电压,两路电压完成乘法运算后,在进行场管沟道电阻的非线性校正,最后从5脚输出PWM电压,控制Q1沟道电阻的导通与截止,以下贴出代码,仅供参考;
- /**********************************************************************
- * 矿石机小功放(带自动音量控制)
- * 带开关音量电位器线性(1k-1000k)范围都可以使用
- * agc直流分量反馈电压(0-1.1V)
- * 单片机ATTINY13A内部主频9.6M
- ***********************************************************************/
- #include <avr/interrupt.h>
- #include <util/delay.h>
- volatile unsigned int vol=0; //音量电位器
- volatile unsigned long agc=0; //AM检波直流分量
- /***********************************************************************
- * ADC转换函数
- * 平均值滤波2.9ms
- ***********************************************************************/
- unsigned int adc(void)
- {
- unsigned int sum=0;
- for(unsigned char i=0;i<64;i++)
- {
- ADCSRA |= (1<<ADSC); //开启转换
- while ((ADCSRA & (1<<ADIF))==0); //等待AD转换完成
- ADCSRA |= (1<<ADIF); //置位ADIF
- unsigned char l=ADCL;
- unsigned int h=ADCH;
- ADCSRA &=~ (1<<ADSC); //停止转换
- sum+=((h<<8)+l);
- }
- return (unsigned int)(sum>>6);
- }
- /***********************************************************************
- *
- * 主 程 序
- *
- ***********************************************************************/
- int main(void)
- {
- DDRB = 0b00000001; //PB0端口输出,PB1:5端口输入
- OCR0A = 0; //占空比100%,开机音量最小
- TCCR0A |= (1 << COM0A1) | (1 << COM0A0) | (1 << WGM01) | (1 << WGM00); //OC1A 起始高电平电平,快速PWM
- TCCR0B |= (1 << CS00); //快速PWM,不分频PWM启动
- ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS0); //使能ADC,32分频
- while(1)
- {
- ADMUX |= (1<<REFS0); //选择片内1.1V基准
- ADMUX |= (1<<MUX0); //选择通道ADC3
- ADMUX |= (1<<MUX1);
- if(adc()<1023) //PB3欠压检测(电池电压低于3.2v)
- {
- OCR0A=0; //关闭音量最
- }
- else
- {
- ADMUX &=~ (1<<REFS0); //vcc基准
- ADMUX &=~ (1<<MUX0); //选择通道ADC2
- ADMUX |= (1<<MUX1);
- vol=adc(); //PB4音量电位器电压vol
- ADMUX |= (1<<REFS0); //选择片内1.1V基准
- ADMUX |= (1<<MUX0); //选择通道ADC1
- ADMUX &=~ (1<<MUX1);
- //agc=adc()>>1; //PB5检波直流分量电压agc(0-0.55v)
- agc=adc(); //PB5检波直流分量电压agc(0-1.1v)
-
- unsigned long u=vol-((vol*agc)/1023); //自动音量增益控制
- unsigned int x1 = 0, x2 = 0, y1 = 0, y2 = 0; //插值(3EQ沟道电阻非线性校正,偏置电压0.53V)
- if (u > 921){ x1 = 921; y1 = 933; x2 = 1023; y2 =1023; }
- else if (u > 818){ x1 = 818; y1 = 915; x2 = 921; y2 = 933; }
- else if (u > 716){ x1 = 716; y1 = 897; x2 = 818; y2 = 915; }
- else if (u > 602){ x1 = 602; y1 = 882; x2 = 716; y2 = 897; }
- else if (u > 512){ x1 = 512; y1 = 867; x2 = 602; y2 = 882; }
- else if (u > 409){ x1 = 409; y1 = 846; x2 = 512; y2 = 867; }
- else if (u > 307){ x1 = 307; y1 = 818; x2 = 409; y2 = 846; }
- else if (u > 205){ x1 = 205; y1 = 767; x2 = 307; y2 = 818; }
- else if (u > 102){ x1 = 102; y1 = 617; x2 = 205; y2 = 767; }
- else if (u >= 0){ x1 = 0; y1 = 0; x2 = 102; y2 = 617; }
- unsigned int y=y1*(x2-u)/(x2-x1); //计算本段两点式线性方程
- y+=y2*(u-x1)/(x2-x1);
- OCR0A=y>>2; //pwm输出
- }
- }
复制代码
试听效果:
音质远好于普通便携式收音机,中国之声无杂音,非常耐听,AGC控制效果不如外差式收音机好,主要原因控制方式和控制增益不够,强台控制效果不太理想,中强台基本上可以做到不失真。
|
评分
-
7
查看全部评分
-
|