資料介紹
描述
靈感
從一開始,我就知道我需要在我的項(xiàng)目中加入一個(gè)復(fù)古玩具。
第一步
收到我自己的留聲機(jī)后,我拿起隨附的公對(duì)公 3.5 毫米音頻線(以及三節(jié)不隨附的 AA 電池),用一只手將電線握在一起,另一只手將手寫筆固定在鍵盤上,從而確定輸出信號(hào)的范圍.
由于留聲機(jī)輸出的是單聲道信號(hào),因此我使用筆尖 (T) 作為輸入,使用套管 (S) 作為接地(順便說一下,R?? 代表環(huán))。
基本的留聲機(jī)有一個(gè)用于 3 種聲音模式的開關(guān)、一個(gè)顫音開關(guān)、一個(gè)電源開關(guān)、一個(gè)音量旋鈕和一個(gè)調(diào)諧旋鈕。我建議在最大音量和無顫音下使用配置文件 1,下面的所有結(jié)果都使用這些設(shè)置。調(diào)準(zhǔn)時(shí),留聲機(jī)的最低音符是 A (110Hz),最高音符是 E (329.63 Hz)。當(dāng)留聲機(jī)開啟時(shí)(可以說是“預(yù)熱”),留聲機(jī)的輸出最小電壓范圍為 -1.7 V 至 -100 mV,峰值電壓范圍為 1.7 V 至 3.5 V。自 TI MSP430G2553無法讀取負(fù)電壓,如果您移動(dòng)參考電壓,Uno 只能讀取負(fù)電壓,我決定使用 TI LM741 運(yùn)算放大器構(gòu)建增益和轉(zhuǎn)換電路。
電路
可以構(gòu)建一個(gè)簡單的電路,將 [-2, 2] V 轉(zhuǎn)換為 [0, 4[ V 并應(yīng)用增益以獲得輸出 [0, 3] V。
可以使用來自 MSP430G2553 的 3.3V 電源和一個(gè) 10k 電位器來控制同相輸入。圖中的 R1 和 Rf 選擇為 9.1 kOhm 和 12 kOhm,以實(shí)現(xiàn) 9.1k/12k ? 3/4 增益。還選擇了較大的電阻器來限制電流量。考慮到這一點(diǎn),我在 LTSpice(您可以在此處免費(fèi)下載)中設(shè)計(jì)和仿真電路。
幸運(yùn)的是,TI 為他們的許多部件提供了 SPICE 模型,這樣的精確仿真是可能的。(您可以在此處下載 LM741.mod )。模擬給出了從 [-2, 2] V 到 [0, 3.3] V 的預(yù)期偏移,所以是時(shí)候構(gòu)建電路了!
構(gòu)建電路
電路中使用的唯一部件是一個(gè) 9.1k 和 12k 歐姆電阻器、一個(gè) 0.1μ 法拉電容器、一個(gè) 10k 電位器、TI LM741、一個(gè) 3.5mm 音頻插孔和一些電線。
焊接電路后,使用 +12/-12 V 直流電源和 MSP430G2553 的 3.3 V 電壓為其供電。從函數(shù)發(fā)生器提供 4 V 峰峰值的輸入正弦波產(chǎn)生了我想要看到的結(jié)果。
現(xiàn)在提供來自留聲機(jī)的輸入并調(diào)整電位器偏移...
?
您會(huì)注意到,根據(jù)定義,高音 (E 329.63 Hz) 比低音 (A 110 Hz) 緊湊得多。這會(huì)產(chǎn)生采樣問題,稍后將對(duì)此進(jìn)行解釋。
MSP430G2553(主控)
MSP4302553的作用是對(duì)音頻信號(hào)進(jìn)行采樣,發(fā)送給arduino,根據(jù)接收到的信息,驅(qū)動(dòng)舵機(jī)。ADC10 和定時(shí)器 A0 設(shè)置為以 8kHz 采樣。
// Init ADC10
// Control Register 0
ADC10CTL0 = SREF_0; // Vr+ = Vcc and Vr- = Vss (default)
ADC10CTL0 += ADC10SHT_1; // 8 X ADC10CLKs
// ADC10SR: 2000 ksps (default)
// REFOUT: reference output off (default)
// REFBURST: continuous (default)
// MSC: single conversion mode (default)
// REFON: reference generator off (default)
ADC10CTL0 += ADC10ON; // ADC10 On
ADC10CTL0 += ADC10IE; // interrupt enabled
// Control Register 1
ADC10CTL1 = INCH_3; //input channel A3 (default)
ADC10CTL1 += SHS_0; // sample and hold source ADC10SC (default)
// ADC10DF: straight binary data format (default)
ADC10CTL1 += ADC10DIV_0; // Clock divider, try values and check noise
ADC10CTL1 += ADC10SSEL_0; // clock source ADC10SC
ADC10CTL1 += CONSEQ_0; // Single channel single conversion
// analog enable control register 0
ADC10AE0 = 8; // Enable A3 as ADC channel
引腳 1.4(任意)成為從機(jī)選擇并初始化 SPI
// Initialize Port 1, P1.0 LED, P1.4 SS
P1SEL &= ~(BIT0 + BIT4); // P1.0 and P1.4 GPIO
P1SEL &= ~(BIT0 + BIT4); // P1.0 and P1.4 GPIO
P1REN &= ~(BIT0 + BIT4); // P1.0 and P1.4 Resistor disabled
P1DIR |= BIT0 + BIT4; // Set P1.0 and P1.4 to output direction
P1OUT &= BIT4; // Initially set P1.4/SS high
// Port 1 SPI pins, P1.5 SCLK, P1.6 MISO, P1.7 MOSI
P1SEL |= BIT5 + BIT7 + BIT6; // Secondary Peripheral Module Function for P1.5-1.7
P1SEL2 |= BIT5 + BIT7 + BIT6; // Secondary Peripheral Module Function for P1.5-1.7
// Polarity and SCLK for SPI
UCB0CTL0 = UCCKPH + UCCKPL; // first edge: data capture, following edge: data update , SCLK inactive state High
// Initialize SPI
UCB0CTL0 |= UCMSB + UCMST + UCSYNC + UCMODE_0; // MSB first, master, 3-pin, 8-bit synchronous
UCB0CTL1 = UCSSEL_2 + UCSWRST; // SMCLK, enable SW Reset
// bit rate: SMCLK/x=SCLK
// smclk same as arduino uno (16 Mhz)
UCB0BR0 = 32; // low byte, divide by
// 4 divider or greater, 8 and 16 causes issues, 32 seems okay
UCB0BR1 = 0; // same as 1 divider, high byte
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IFG2 &= ~UCB0RXIE; // Clear RX interrupt flag in case it was set during init
IE2 |= UCB0RXIE; // Enable USCI0 RX interrupt
端口 2 設(shè)置為使用 TA1 和 TA2 引腳創(chuàng)建 PWM 信號(hào)來控制伺服系統(tǒng)。
// Init Port 2
// setup P2.1 with Timer1_A3.TA1 and P2.4 with Timer1_A3.TA2
P2DIR |= 0x12;
P2SEL |= 0x12;
P2SEL2 = 0;
退一步,讓我們談?wù)?SPI。
接口接口
它有很多內(nèi)容,但歸根結(jié)底是摩托羅拉在 1980 年代創(chuàng)建的通信接口規(guī)范,可用作雙向通道。主機(jī) (MSP430G2553) 和從機(jī) (Uno) 需要共享四條主要線路:SCLK、MISO、MOSI 和 SS。SCLK(串行時(shí)鐘)由主機(jī)生成,以便通信保持同步。MISO(Master In Slave Out)和 MOSI(Master Out Slave In 是街道的兩側(cè),指示交通行駛的方向(有時(shí)稱為 SOMI 和 SIMO)。SS(Slave Select)告訴從站何時(shí)應(yīng)該收聽master, 以及何時(shí)忽略它。這允許一個(gè) master 擁有多個(gè) slaves 而不會(huì)導(dǎo)致通信錯(cuò)誤。配置 SPI 有不同的方法,但我選擇的設(shè)置(如上面代碼中指定的)看起來像這樣。
?
該圖可在 MSP430x2xx 系列用戶指南的第 448 頁找到。
Arduino Uno(奴隸)
Arduino 證明了一個(gè)使 SPI 通信變得容易的庫,但只是為了讓 Arduino 成為主人(去圖)。
pinMode(MISO, OUTPUT);
// turn on SPI with interrupts, slave mode, msbit first
// clock idle when high, sample on falling edge of clock
SPCR = _BV(SPE) + _BV(SPIE) + _BV(CPOL) +_BV(CPHA);
/*
* SPIE - Enables the SPI interrupt when 1
* SPE - Enables the SPI when 1
* DORD - Sends data least Significant Bit First when 1, most Significant Bit first when 0
* MSTR - Sets the Arduino in master mode when 1, slave mode when 0
* CPOL - Sets the data clock to be idle when high if set to 1, idle when low if set to 0
* CPHA - Samples data on the falling edge of the data clock when 1, rising edge when 0
* SPR1 and SPR0 - Sets the SPI speed, 00 is fastest (4MHz) 11 is slowest (250KHz)
*
*/
設(shè)置只需要兩行代碼,但通信中的大部分困難在于讓 Uno 作為奴隸合作。Uno 和 MSP430G2553 均以 16Mhz 運(yùn)行,但 MSP430G2553 可以通過使用較小的分頻器 (UCB0BRx) 設(shè)置波特率控制寄存器來更快地通過 SPI 進(jìn)行通信。Uno 至少需要一個(gè) 4 分頻器 (4 Mhz),但我發(fā)現(xiàn)偶爾會(huì)出現(xiàn)錯(cuò)誤傳輸(0x1234 變?yōu)?0x3400),直到 32 分頻器 (500 kHz)。我選擇將 MSP430G2553 作為主器件的原因之一是 ADC 采用 10 位樣本,而 Uno 只能采用 8 位樣本。這里越多越好,因?yàn)樗峁┝烁叩姆直媛?,這意味著 MSP430G2553 可能能夠看到 1 mV 的差異,而 Uno 可能看不到。雖然這兩個(gè)設(shè)備之間的 SPI 一次發(fā)送 8 位,可以簡單地發(fā)送 2 組 8 位來獲取 MSP430G2553 的 10 位值。唯一的問題是確保較慢的 Arduino 不會(huì)落后。
剩下的貓頭鷹
最初的目的是在 Uno 上使用 FFT 或音調(diào)檢測(cè)庫,但這只會(huì)讓事情變得更慢。最終,由于我知道來自留聲機(jī)的信號(hào)的形狀(每個(gè)周期一個(gè)上升沿和一個(gè)下降沿),所以我采用了一種更簡單、更快速的方法。當(dāng)前一個(gè)平均值小于閾值時(shí),我只是等待最后 4 個(gè)樣本的平均值大于閾值。這告訴我我觸發(fā)了上升沿。然后我數(shù)了多久,直到再次發(fā)生這種情況并存儲(chǔ)起來。然后我會(huì)簡單地取最后 10 個(gè)計(jì)數(shù)/周期的中值來過濾掉任何異常值。這會(huì)瞬間發(fā)生,并允許伺服系統(tǒng)實(shí)時(shí)做出反應(yīng)。
只需更改 MSP430G2553 上 PWM 信號(hào)的占空比即可移動(dòng)伺服器。例如:
TA1CCR2 = 2100; TA1CCR1 = 2100;
最后的想法
我可能會(huì)嘗試改進(jìn)代碼,以便稍后伺服在高頻下更加穩(wěn)定。
- 交流永磁伺服系統(tǒng)的控制策略 9次下載
- 交流永磁伺服系統(tǒng)的控制策略 21次下載
- 交流永磁伺服系統(tǒng)的控制策略 10次下載
- 交流永磁伺服系統(tǒng)的控制策略 18次下載
- 交流永磁伺服系統(tǒng)的控制策略 10次下載
- 伺服系統(tǒng)的組成 19次下載
- 基于SVPWM的PMSM矢量控制伺服系統(tǒng)研究 23次下載
- 轉(zhuǎn)臺(tái)伺服系統(tǒng)模糊PID復(fù)合控制算法 15次下載
- 音圈電機(jī)伺服系統(tǒng)模糊PID控制 18次下載
- 基于DSP的電機(jī)伺服系統(tǒng)中的模糊PID控制 26次下載
- 伺服系統(tǒng)的PID控制技術(shù)下載 8次下載
- 伺服系統(tǒng)的PID控制
- 伺服系統(tǒng)的扭矩控制(Toque Control)和速度控制(
- 進(jìn)給伺服系統(tǒng) 0次下載
- 數(shù)控機(jī)床的伺服系統(tǒng)
- 伺服系統(tǒng)與步進(jìn)系統(tǒng)的區(qū)別 579次閱讀
- 伺服系統(tǒng)的結(jié)構(gòu)組成及應(yīng)用場景 623次閱讀
- 液壓伺服系統(tǒng)的類型和應(yīng)用 823次閱讀
- 什么是伺服系統(tǒng)?伺服系統(tǒng)的分類、組成及特點(diǎn) 2774次閱讀
- 伺服系統(tǒng)調(diào)試步驟 6339次閱讀
- 伺服系統(tǒng)設(shè)計(jì)驗(yàn)證流程解決方案 1072次閱讀
- 伺服系統(tǒng)復(fù)合控制技術(shù)和非線性補(bǔ)償技術(shù) 4295次閱讀
- PLC控制伺服系統(tǒng)步驟_西門子PLC控制的伺服控制系統(tǒng)詳解 5.2w次閱讀
- 伺服系統(tǒng)應(yīng)用于哪兒_伺服系統(tǒng)應(yīng)用實(shí)例 1.6w次閱讀
- 現(xiàn)代交流伺服系統(tǒng)原理及控制方法 6518次閱讀
- 伺服系統(tǒng)什么意思_伺服系統(tǒng)的作用是什么 3.3w次閱讀
- 伺服系統(tǒng)是什么_伺服系統(tǒng)的基本要求_伺服系統(tǒng)的基本組成 1.8w次閱讀
- 什么是伺服系統(tǒng),步進(jìn)電機(jī)和伺服電機(jī)的區(qū)別 1.2w次閱讀
- 伺服系統(tǒng)淺析,伺服系統(tǒng)的分類、結(jié)構(gòu)組成與技術(shù)要求 8176次閱讀
- 步進(jìn)電機(jī)開環(huán)伺服系統(tǒng)解析,開環(huán)步進(jìn)伺服系統(tǒng)的工作原理 1.6w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多