13.6. Эксперименты с акселерометром

(Руководство разработчика по микроконтроллерам семейства HCS08)

В Примере 13.10 показано, как реализовать простой датчик перемещения, используя демонстрационную плату DEMO9S08QE128 и размещенный на этой плате акселерометр MMA7260QT. Рис.13.12 иллюстрирует направления координат для платы DEMO9S08QE128 в предлагаемом эксперименте.

Рис.13.12. Направления координат для экспериментов с датчиком перемещения.

Микросхема датчика MMA7260QT подключена к МК так, как показано на Рис.13.13. Пожалуйста, не забудьте: для того чтобы использовать схему датчика ускорения, необходимо джамперы J5, J13 и J14 установить в положение 1-2, а контакты разъема J16 должны быть попарно закорочены, чтобы выводы XOUT, YOUT и ZOUT были подсоединены к входам МК.

Рис.13.13. Схема подключения датчика MMA7260QT на плате DEMO9S08QE128.

Программный код Примера 13.10 оцифровывает напряжение на выходе XOUT и зажигает светодиоды, которые подсоединены к выводам порта С и порта E. После нажатия кнопки, подсоединенной к PTD3, программа перейдет к процедуре калибровки. При данной процедуре происходит оцифровка сигнала датчика на выходе XOUT в положении без движения, этот сигнал программа запоминает в качестве кода установки.

Далее, в процессе основной работы:

  • если плата лежит на горизонтальной поверхности без движения, то горит только один светодиод PTC3;
  • если плату переместить влево или вправо, то засветятся все светодиоды, отображая измеренную величину ускорения.

Пример 13.10. Датчик перемещения

/*
ДемонстрационнаяплатаMC9S08QE128сдатчикомускоренияMMA7260QT
ПрограммаразработанаFabioPereira(01/20/08)
www.sctec.com.br
Соединениянаплате:
PTA1–XOUT
PTA6-YOUT
PTA7-ZOUT
PTC4-MMA7260,входрежимаработыдатчика(0=спящий,1=активный)
PTD0-MMA7260,входвыборадиапазонаg-select1
PTD1-MMA7260,входвыборадиапазонаg-select2
PTC0–PTC5-светодиоды
PTE6,PTE7-светодиоды
ADC:
-триканаладляизмерениянапряженийпотремосям(PTA1,PTA6мPTA7)
*/
#include/*forEnableInterruptsmacro*/
#include"derivative.h"/*includeperipheraldeclarations*/
#include"hcs08.h"/*Этонашфайлсобъявлениями*/
#defineACCEL_ONPTCD_PTCD4
#defineCAL_SWPTDD_PTDD3
unsignedintx_axis,y_axis,z_axis;
unsignedlongintx_sum,y_sum,z_sum;
unsignedintx_cal;
charadc_seq_complete;
//ПодпрограммапрерыванияотАЦП
voidinterruptVectorNumber_Vadcadc_isr(void)
{
staticcharadc_seq;
switch(adc_seq)
{
case0:
x_sum=(x_sum+ADCR)-x_axis;
ADCSC1=bAIEN|ADCH8;//Следующийканалоцифровки=8(осьy)
adc_seq++;
break;
case1:
y_sum=(y_sum+ADCR)-y_axis;
ADCSC1=bAIEN|ADCH9;//Следующийканалоцифровки=9(осьz)
adc_seq++;
break;
case2:
z_sum=(z_sum+ADCR)-z_axis;
ADCSC1=bAIEN|ADCH1;//Следующийканалоцифровки=1(осьx)
adc_seq=0;
adc_seq_complete=1;//Флагзавершенияпреобразованияпотремосям
break;
}
}
voidmain(void)
{
SOPT1=bBKGDPE;//Разрешитьфункциюлинииотладки
ICSSC=NVFTRIM;//КопироватьподстроечноечислоFTRIM
ICSTRM=NVICSTRM;//КопироватьподстроечноечислоTRIM
ICSC2=0;//ICSOUT=DCOOUT/1
/*ИнициализациямодуляADC:низкаяскоростьпреобразования,разрешающаяспособность
12бит,ADICLK=00000011,ADCK=BUSCLK/16*/
ADCCFG=bADLSMP|ADC_12BITS|ADC_BUSCLK_DIV2|ADIV_8;
APCTL1=ADPC1;//ЛинияADP1-входАЦП
APCTL2=ADPC8|ADPC9;//ЛинииADP8иADP9работаюткаквходыАЦП
//ADCканал1,разрешитьпрерыванияотАЦП
ADCSC1=bAIEN|ADCH1;
PTDD=0;//Назначитьдиапазонпреобразованияв1.5g
PTDDD=BIT_0|BIT_1;
PTBDD=BIT_6|BIT_7;//ЛинииPTB6иPTB7–навывод
PTCDD=0xFF;//ЛинииPTC–навывод
PTEDD=BIT_7|BIT_6;
x_sum=y_sum=z_sum=0;
x_axis=y_axis=z_axis=0;
ACCEL_ON=1;
x_cal=0;
EnableInterrupts;//Разрешитьпрерывания(CCR:I=0)
while(1)
{
if(adc_seq_complete)
{
x_axis=x_sum/32;//Вычислитькоординатуx
y_axis=y_sum/32;//Вычислитькоординатуy
z_axis=z_sum/32;//Вычислитькоординатуz
adc_seq_complete=0;
}
PTCD=0xFF;//ВыключитьсветодиодыпортаPTC
PTED=0xC0;//ВыключитьсветодиодыпортаPTE
//Есликнопкакалибровкинажата,тозапомнитькоординатуx
if(!CAL_SW)x_cal=x_axis;
if(x_axis>(x_cal+500))PTCD_PTCD0=0;else
if(x_axis>(x_cal+350))PTCD_PTCD1=0;else
if(x_axis>(x_cal+200))PTCD_PTCD2=0;else
if(x_axis<(x_cal-500))PTED_PTED7=0;else
if(x_axis<(x_cal-350))PTED_PTED6=0;else
if(x_axis<(x_cal-200))PTCD_PTCD5=0;elsePTCD_PTCD3=0;

}
}

Электронные компоненты Freescale >>>
Подробнее о компании Freescale >>>