मैं STM32 I2C Hal के साथ LSM303AGR एक्सेलेरोमीटर (Datasheet) का उपयोग कर रहा हूं पुस्तकालय लेकिन मैं संवेदनशीलता का पता नहीं लगा सकता।

कॉन्फ़िगरेशन रजिस्टर सेट करने के लिए मेरा कोड यहां दिया गया है:

void LSM303AGR_Init() {

uint8_t Data[2] = {0};
Data[0]= 0x20;
Data[1]= 0x57;                                                                                                                                                                      //ODR @100Hz                                                                                                //Accelerometer Control Register 1 and Data
HAL_I2C_Master_Transmit(&hi2c1,0x19<<1,Data,2,50);
Data[0]= 0x23;
Data[1]= 0x20;                                                                                                                                                                      //+/-8G and in normal mode
HAL_I2C_Master_Transmit(&hi2c1,0x19<<1,Data,2,50);}
                                                                                            

पहला I2C राइट ट्रांसफर 0x20 रजिस्टर करने के लिए है और सेंसर को सामान्य मोड और आउटपुट डेटा दर 100Hz पर सेट करने के लिए माना जाता है और दूसरा I2C राइट ट्रांसफर स्केल को +/- 8G पर सेट करने वाला है।

साथ ही, XYZ 16bit मानों को पढ़ने और मिलीग्राम में कनवर्ट करने के लिए मेरा कोड यहां दिया गया है (डेटा शीट के अनुसार 15.63 संवेदनशीलता है):

void LSM303AGR_AccReadXYZ(float* pData) {

HAL_I2C_Master_Transmit(&hi2c1,(0x19<<1)|0x01,&accXYZregAutoRead ,1,50);
HAL_I2C_Master_Receive(&hi2c1,(0x19<<1)|0x01, buffer,6,50); 
for(int i=0; i<3; i++) {
pData[i]=(float)((int16_t)((uint16_t)buffer[2*i+1] << 8) | buffer[2*i]) / 15.63;} //Readings in mg                               
}

मैं इस तथ्य के बारे में जानता हूं कि मैं इन रजिस्टरों को लिख रहा हूं और अपने डिबगिंग के माध्यम से सही रजिस्टरों से पढ़ रहा हूं। हालाँकि, ऊपर सेट अप के साथ मुझे 15.63 की संवेदनशीलता का उपयोग करते हुए एक टेबलटॉप पर लगभग 250mg का आउटपुट मान मिलता है (ज़ेड-अक्ष के लिए निश्चित रूप से अन्य शून्य के बारे में हैं) लेकिन जब मैं 15.63 से 3.9 संवेदनशीलता (डेटाशीट पृष्ठ 13) को बदलता हूं। z अक्ष पर लगभग 1000mg प्राप्त करें जो सही है! समस्या यह है कि, मेरे रजिस्टर +/- 8G (डेटाशीट पीजी 49) और सामान्य पावर मोड (डेटाशीट पीजी 47) पर सेट हैं और डेटाशीट के अनुसार संवेदनशीलता 15.63 होनी चाहिए न कि 3.9!

कोई भी सहायताकाफी प्रशंसनीय होगी!

0
user13909066 6 अक्टूबर 2021, 05:03

1 उत्तर

सबसे बढ़िया उत्तर

आप सामान्य मोड का उपयोग कर रहे हैं, इसलिए आपका डेटा 10 बिट होना चाहिए और आपको अपने रीड को 6 से दाएं स्थानांतरित करना चाहिए (मान उचित छोड़ दिए गए हैं)।

0
Damiano 7 अक्टूबर 2021, 10:18
रजिस्टरों को जायज छोड़ दिया जाता है। शुक्रिया!
 – 
user13909066
6 अक्टूबर 2021, 19:20