تتواصل هذه المكتبة مع وحدات القياس بالقصور الذاتي (IMUs) InvensenseMPU-6500 وInvenSense MPU-9250 وMPU-9255. هذه المكتبة متوافقة مع أنظمة بناء Arduino وCMake.
إن Invense MPU-6500 عبارة عن جيروسكوب ثلاثي المحاور ومقياس تسارع ثلاثي المحاور. InvenSense MPU-9250 عبارة عن نظام في حزمة (SiP) يجمع بين شريحتين: جيروسكوب MPU-6500 ثلاثي المحاور ومقياس تسارع ثلاثي المحاور؛ ومقياس المغناطيسية ثلاثي المحاور AK8963. يدعم MPU-6500 وMPU-9250 I2C، حتى 400 كيلو هرتز، واتصال SPI، حتى 1 ميجا هرتز لإعداد التسجيل و20 ميجا هرتز لقراءة البيانات. تتوفر نطاقات أجهزة الاستشعار واسعة النطاق التالية القابلة للتحديد:
جيروسكوب النطاق الكامل | نطاق مقياس التسارع الكامل | النطاق الكامل لمقياس المغناطيسية (MPU-9250 فقط) |
---|---|---|
+/- 250 درجة/ثانية | +/- 2 جرام | +/- 4800 وحدة تسلا |
+/- 500 درجة/ثانية | +/- 4 جرام | |
+/- 1000 درجة/ثانية | +/- 8 جرام | |
+/- 2000 درجة/ثانية | +/- 16 جرام |
تقوم وحدات IMU بتجربة الجيروسكوبات ومقاييس التسارع ومقاييس المغناطيسية باستخدام محولات تناظرية إلى رقمية 16 بت. كما يتميز أيضًا بمرشحات رقمية قابلة للبرمجة وساعة دقيقة ومستشعر درجة حرارة مدمج.
استخدم Arduino Library Manager لتثبيت هذه المكتبة أو استنساخها في مجلد Arduino/libraries الخاص بك.
بالنسبة إلى MPU-6500، تتم إضافة هذه المكتبة على النحو التالي:
# include " mpu6500.h "
بالنسبة إلى MPU-9250، تتم إضافة هذه المكتبة على النحو التالي:
# include " mpu9250.h "
توجد ملفات Arduino التنفيذية في: example/arduino/ . يتم استخدام أجهزة Teensy 3.x و4.x وLC للاختبار تحت Arduino ويجب أن تكون هذه المكتبة متوافقة مع أجهزة Arduino الأخرى.
يتم استخدام CMake لإنشاء هذه المكتبة، والتي يتم تصديرها كهدف مكتبة يسمى invensense_imu .
بالنسبة إلى MPU-6500، تتم إضافة هذه المكتبة على النحو التالي:
# include " mpu6500.h "
بالنسبة إلى MPU-9250، تتم إضافة هذه المكتبة على النحو التالي:
# include " mpu9250.h "
يمكن أيضًا تجميع المكتبة بشكل مستقل باستخدام لغة CMake لإنشاء دليل بناء ثم إصدار: من داخل هذا الدليل:
cmake .. -DMCU=MK66FX1M0
make
سيؤدي هذا إلى إنشاء المكتبة وأمثلة للملفات التنفيذية التي تسمى i2c_example و spi_example و drdy_spi_example و wom_example (MPU-9250 فقط). توجد ملفات المصدر القابلة للتنفيذ في الأمثلة/cmake . لاحظ أن الأمر cmake يتضمن تعريفًا يحدد المتحكم الدقيق الذي يتم تجميع الكود من أجله. يعد هذا مطلوبًا لتكوين التعليمات البرمجية وتردد وحدة المعالجة المركزية وخيارات الترجمة/الرابط بشكل صحيح. وحدات MCU المتاحة هي:
من المعروف أنها تعمل مع نفس الحزم المستخدمة في منتجات Teensy. ومن المعروف أيضًا أن تبديل الحزم يعمل بشكل جيد، طالما أنه مجرد تغيير في الحزمة.
يقوم المثال بإنشاء ملفات تنفيذية للتواصل مع المستشعر باستخدام اتصال I2C أو SPI، باستخدام مقاطعة البيانات الجاهزة، واستخدام مقاطعة التنبيه عند الحركة، على التوالي. يحتوي كل هدف أيضًا على _hex لإنشاء ملف سداسي عشري للتحميل إلى وحدة التحكم الدقيقة، و_ upload لاستخدام Teensy CLI Uploader لفلاش Teensy. يرجى ملاحظة أنه يمكن العثور على تعليمات إعداد بيئة البناء الخاصة بك في مستودع أدوات البناء الخاص بنا.
تقع هذه المكتبة ضمن مساحة الاسم bfs .
توفر هذه الفئة طرقًا للقراءة والكتابة للمسجلات الموجودة على هذه المستشعرات. من المتوقع أن يعمل هذا مع MPU-6000 وMPU-6050 وMPU-6500 وMPU-9150 وMPU-9250 على الأقل؛ على الرغم من أنه قد يعمل مع أجهزة الاستشعار الأخرى أيضًا. من المرجح أن يفضل معظم المستخدمين فئات المستشعر المحددة أدناه؛ ومع ذلك، قد تمكن هذه الفئة الأشخاص من فتح وظائف أكبر واستخدامها كنقطة بداية لبرامج تشغيل أجهزة الاستشعار الخاصة بهم.
يتطلب المُنشئ الافتراضي InvensenseImu() استدعاء طريقة التكوين لإعداد ناقل I2C أو SPI وعنوان I2C أو دبوس تحديد شريحة SPI.
InvensenseImu(TwoWire *i2c, const uint8_t addr) يقوم بإنشاء كائن InvensenseImu. يتم استخدام هذا المُنشئ لواجهة اتصال I2C. يتم تمرير مؤشر إلى كائن ناقل I2C مع عنوان I2C الخاص بالمستشعر.
InvensenseImu(SPIClass *bus, uint8_t cs) يقوم بإنشاء كائن InvensenseImu. يتم استخدام هذا المنشئ لواجهة اتصال SPI. يتم تمرير مؤشر إلى كائن ناقل SPI مع دبوس تحديد الشريحة الخاص بالمستشعر. يمكن استخدام أي طرف قادر على الإدخال/الإخراج الرقمي كدبوس تحديد شريحة.
void Config(TwoWire *bus, const uint8_t addr) يعد هذا مطلوبًا عند استخدام المنشئ الافتراضي وإعداد ناقل I2C وعنوان I2C.
void Config(SPIClass *spi, const uint8_t cs) يعد هذا مطلوبًا عند استخدام المُنشئ الافتراضي وإعداد ناقل SPI ودبوس تحديد الشريحة.
void Begin() يقوم بتهيئة الاتصال مع المستشعر. لم تتم تهيئة ناقل الاتصال داخل هذه المكتبة ويجب تهيئته بشكل منفصل؛ وهذا يعزز التوافق مع أجهزة الاستشعار الأخرى الموجودة على نفس الناقل.
bool WriteRegister(const uint8_t reg, const uint8_t data, const int32_t spi_clock) يكتب بيانات التسجيل إلى المستشعر بالنظر إلى عنوان التسجيل والبيانات. يجب تحديد سرعة ساعة SPI في حالة استخدام اتصال SPI.
bool WriteRegister(const uint8_t reg, const uint8_t data) التحميل الزائد لما سبق حيث يتم استخدام اتصال I2C.
bool ReadRegisters(const uint8_t reg, const uint8_t count, const int32_t spi_clock, uint8_t * const data) يقرأ بيانات التسجيل من المستشعر مع إعطاء عنوان التسجيل وعدد السجلات المطلوب قراءتها وساعة SPI ومؤشر لتخزين البيانات.
bool ReadRegisters(const uint8_t reg, const uint8_t count, uint8_t * const data) التحميل الزائد لما سبق حيث يتم استخدام اتصال I2C.
تعمل هذه الفئة مع وحدات IMU MPU-9250 وMPU-9255.
يتطلب المُنشئ الافتراضي Mpu9250() استدعاء طريقة التكوين لإعداد ناقل I2C أو SPI وعنوان I2C أو دبوس تحديد شريحة SPI.
Mpu9250(i2c_t3 *bus, I2cAddr addr) يقوم بإنشاء كائن Mpu9250. يتم استخدام هذا المُنشئ لواجهة اتصال I2C. يتم تمرير مؤشر إلى كائن ناقل I2C مع عنوان I2C الخاص بالمستشعر. سيكون العنوان I2C_ADDR_PRIM (0x68) إذا كان طرف AD0 مؤرضًا وI2C_ADDR_SEC (0x69) إذا تم سحب طرف AD0 عاليًا.
Mpu9250 mpu9250 (&Wire, bfs::Mpu9250::I2C_ADDR_PRIM);
Mpu9250(SPIClass *bus, uint8_t cs) يقوم بإنشاء كائن Mpu9250. يتم استخدام هذا المنشئ لواجهة اتصال SPI. يتم تمرير مؤشر إلى كائن ناقل SPI مع دبوس تحديد الشريحة الخاص بالمستشعر. يمكن استخدام أي طرف قادر على الإدخال/الإخراج الرقمي كدبوس تحديد شريحة.
Mpu9250 mpu9250 (&SPI, 2 );
void Config(TwoWire *bus, const I2cAddr addr) يعد هذا مطلوبًا عند استخدام المنشئ الافتراضي وإعداد ناقل I2C وعنوان I2C. سيكون العنوان I2C_ADDR_PRIM (0x68) إذا كان طرف AD0 مؤرضًا وI2C_ADDR_SEC (0x69) إذا تم سحب طرف AD0 عاليًا.
void Config(SPIClass *spi, const uint8_t cs) يعد هذا مطلوبًا عند استخدام المُنشئ الافتراضي وإعداد ناقل SPI ودبوس تحديد الشريحة.
bool Begin() يقوم بتهيئة الاتصال مع المستشعر وتكوين نطاقات المستشعر الافتراضية ومعدلات أخذ العينات وإعدادات مرشح التمرير المنخفض. نطاق مقياس التسارع الافتراضي هو +/- 16 جم ونطاق الجيروسكوب الافتراضي هو +/- 2000 درجة/ثانية. معدل أخذ العينات الافتراضي هو 1000 هرتز ويتم ضبط مرشح التردد المنخفض على تردد قطع قدره 184 هرتز. يتم إرجاع True إذا كان من الممكن إنشاء الاتصال مع المستشعر واكتمال التكوين بنجاح، وإلا فسيتم إرجاع false. لم تتم تهيئة ناقل الاتصال داخل هذه المكتبة ويجب تهيئته بشكل منفصل؛ وهذا يعزز التوافق مع أجهزة الاستشعار الأخرى الموجودة على نفس الناقل.
Wire.begin();
Wire.setClock( 400000 );
bool status = mpu9250.Begin();
if (!status) {
// ERROR
}
bool EnableDrdyInt() يمكّن مقاطعة البيانات الجاهزة. سيتم تشغيل مقاطعة 50 US على دبوس MPU-9250 INT عندما تكون بيانات IMU جاهزة. هذه المقاطعة نشطة عالية. تُرجع هذه الطريقة صحيحًا إذا تم تمكين المقاطعة بنجاح، وإلا فسيتم إرجاع خطأ.
bool status = mpu9250.EnableDrdyInt();
if (!status) {
// ERROR
}
bool DisableDrdyInt() يعطل مقاطعة البيانات الجاهزة. تُرجع هذه الطريقة صحيحًا إذا تم تعطيل المقاطعة بنجاح، وإلا فسيتم إرجاع خطأ.
bool status = mpu9250.DisableDrdyInt();
if (!status) {
// ERROR
}
bool ConfigAccelRange(const AccelRange range) يضبط النطاق الكامل لمقياس التسارع. الخيارات هي:
يتراوح | قيمة التعداد |
---|---|
+/- 2 جرام | ACCEL_RANGE_2G |
+/- 4 جرام | ACCEL_RANGE_4G |
+/- 8 جرام | ACCEL_RANGE_8G |
+/- 16 جرام | ACCEL_RANGE_16G |
يتم إرجاع True عند ضبط نطاق مقياس التسارع بنجاح، وإلا فسيتم إرجاع false. النطاق الافتراضي هو +/-16 جرام.
bool status = mpu9250.ConfigAccelRange(bfs::Mpu9250::ACCEL_RANGE_4G);
if (!status) {
// ERROR
}
AccelRange Accel_range() يُرجع نطاق مقياس التسارع الحالي.
AccelRange range = mpu9250.accel_range();
bool ConfigGyroRange(const GyroRange range) يضبط نطاق النطاق الكامل للجيروسكوب. الخيارات هي:
يتراوح | قيمة التعداد |
---|---|
+/- 250 درجة/ثانية | GYRO_RANGE_250DPS |
+/- 500 درجة/ثانية | GYRO_RANGE_500DPS |
+/- 1000 درجة/ثانية | GYRO_RANGE_1000DPS |
+/- 2000 درجة/ثانية | GYRO_RANGE_2000DPS |
يتم إرجاع True عند ضبط نطاق الجيروسكوب بنجاح، وإلا فسيتم إرجاع false. النطاق الافتراضي هو +/-2000 درجة/ثانية.
bool status = mpu9250.ConfigGyroRange(bfs::Mpu9250::GYRO_RANGE_1000DPS);
if (!status) {
// ERROR
}
GyroRange gyro_range() يُرجع نطاق الجيروسكوب الحالي.
GyroRange range = mpu9250.gyro_range();
bool ConfigSrd(const uint8_t srd) يضبط مقسم معدل عينة المستشعر. يقوم MPU-9250 باختبار مقياس التسارع والجيروسكوب بمعدل بالهرتز يتم تحديده بواسطة:
إعداد srd بقيمة 0 يعني أن MPU-9250 يقوم باختبار مقياس التسارع والجيروسكوب عند 1000 هرتز. سيؤدي إعداد srd من 4 إلى ضبط أخذ العينات عند 200 هرتز. ترتبط المقاطعة الجاهزة لبيانات IMU بالمعدل المحدد بواسطة مقسم معدل العينة. يتم أخذ عينات من مقياس المغناطيسية عند 100 هرتز لقيم مقسم معدل العينة المقابلة لـ 100 هرتز أو أكثر. خلاف ذلك، يتم أخذ عينات من مقياس المغنطيسية عند 8 هرتز.
يتم إرجاع True عند تعيين مقسم معدل العينة بنجاح، وإلا فسيتم إرجاع false. قيمة مقسم معدل العينة الافتراضية هي 0، مما يؤدي إلى معدل عينة يبلغ 1000 هرتز.
/* Set sample rate divider for 50 Hz */
bool status = mpu9250.sample_rate_divider( 19 );
if (!status) {
// ERROR
}
uint8_t srd() إرجاع قيمة مقسم معدل العينة الحالي.
uint8_t srd = mpu9250.srd();
bool ConfigDlpfBandwidth(const DlpfBandwidth dlpf) يضبط تردد القطع لمرشح التمرير المنخفض الرقمي لمقياس التسارع والجيروسكوب ومستشعر درجة الحرارة. عروض النطاق الترددي المتاحة هي:
عرض النطاق الترددي DLPF | قيمة التعداد |
---|---|
184 هرتز | DLPF_BANDWIDTH_184HZ |
92 هرتز | DLPF_BANDWIDTH_92HZ |
41 هرتز | DLPF_BANDWIDTH_41HZ |
20 هرتز | DLPF_BANDWIDTH_20HZ |
10 هرتز | DLPF_BANDWIDTH_10HZ |
5 هرتز | DLPF_BANDWIDTH_5HZ |
يتم إرجاع True عند ضبط مرشحات التمرير المنخفض الرقمية بنجاح، وإلا يتم إرجاع false. عرض النطاق الترددي الافتراضي هو 184 هرتز.
bool status = mpu9250.ConfigDlpfBandwidth(bfs::Mpu9250::DLPF_BANDWIDTH_20HZ);
if (!status) {
// ERROR
}
DlpfBandwidth dlpf_bandwidth() يُرجع إعداد النطاق الترددي الحالي لمرشح التمرير المنخفض الرقمي.
DlpfBandwidth dlpf = mpu9250.dlpf_bandwidth();
bool EnableWom(int16_t عتبة_mg, const WomRate wom_rate) لتمكين مقاطعة Wake-On-Motion. فهو يضع MPU-9250 في حالة طاقة منخفضة، ويتم تنشيطه على فترات زمنية يحددها WomRate . إذا اكتشف مقياس التسارع حركة تتجاوز العتبة، العتبة_mg ، فإنه يولد نبضة تبلغ 50us من دبوس المقاطعة MPU-9250. يتم دعم معدلات WOM المذكورة التالية:
معدل عينة WOM | قيمة التعداد |
---|---|
0.24 هرتز | WOM_RATE_0_24HZ |
0.49 هرتز | WOM_RATE_0_49HZ |
0.98 هرتز | WOM_RATE_0_98HZ |
1.95 هرتز | WOM_RATE_1_95HZ |
3.91 هرتز | WOM_RATE_3_91HZ |
7.81 هرتز | WOM_RATE_7_81HZ |
15.63 هرتز | WOM_RATE_15_63HZ |
31.25 هرتز | WOM_RATE_31_25HZ |
62.50 هرتز | WOM_RATE_62_50HZ |
125 هرتز | WOM_RATE_125HZ |
250 هرتز | WOM_RATE_250HZ |
500 هرتز | WOM_RATE_500HZ |
يتم إعطاء عتبة الحركة كقيمة تتراوح بين 4 و1020 ملغ، والتي يتم تعيينها داخليًا إلى بايت واحد، بقيمة 1-255. تُرجع هذه الوظيفة صحيحًا عند تمكين Wake On Motion بنجاح، وإلا فإنها تُرجع خطأ. يرجى الاطلاع على مثال wom_i2c . فيما يلي مثال لتمكين التنبيه أثناء الحركة بعتبة 40 مجم وODR يبلغ 31.25 هرتز.
imu.EnableWom( 40 , bfs::Mpu9250::WOM_RATE_31_25HZ);
إعادة تعيين الفراغ () يعيد ضبط MPU-9250.
bool Read() يقرأ البيانات من MPU-9250 ويخزن البيانات في كائن Mpu9250. يُرجع صحيحًا إذا تمت قراءة البيانات بنجاح، وإلا يُرجع خطأ.
/* Read the IMU data */
if (mpu9250.Read()) {
}
bool new_imu_data() يُرجع صحيحًا إذا تم إرجاع بيانات جديدة من مقياس التسارع والجيروسكوب.
if (mpu9250.Read()) {
bool new_data = mpu9250. new_imu_data ();
}
منطقي new_mag_data() يُرجع صحيحًا إذا تم إرجاع بيانات جديدة من مقياس المغناطيسية. بالنسبة لمعدلات عينة MPU-9250 التي تبلغ 100 هرتز وأعلى، يتم أخذ عينات من مقياس المغناطيسية عند 100 هرتز. بالنسبة لمعدلات عينة MPU-9250 الأقل من 100 هرتز، يتم أخذ عينات من مقياس المغناطيسية عند 8 هرتز، لذلك ليس من غير المألوف تلقي بيانات IMU جديدة، ولكن ليس بيانات مقياس المغناطيسية الجديدة.
if (mpu9250.Read()) {
bool new_mag = mpu9250. new_mag_data ();
}
float accel_x_mps2() يُرجع بيانات مقياس التسارع x من كائن Mpu9250 بوحدات m/s/s. توجد طرق مماثلة لبيانات المحور y وz.
/* Read the IMU data */
if (mpu9250.Read()) {
float ax = mpu9250. accel_x_mps2 ();
float ay = mpu9250. accel_y_mps2 ();
float az = mpu9250. accel_z_mps2 ();
}
float gyro_x_radps() تُرجع بيانات x gyro من كائن Mpu9250 بوحدات rad/s. توجد طرق مماثلة لبيانات المحور y وz.
/* Read the IMU data */
if (mpu9250.Read()) {
float gx = mpu9250. gyro_x_radps ();
float gy = mpu9250. gyro_y_radps ();
float gz = mpu9250. gyro_z_radps ();
}
float mag_x_ut() يُرجع بيانات مقياس المغناطيسية x من كائن Mpu9250 بوحدات uT. توجد طرق مماثلة لبيانات المحور y وz.
/* Read the IMU data */
if (mpu9250.Read()) {
float hx = mpu9250. mag_x_ut ();
float hy = mpu9250. mag_y_ut ();
float hz = mpu9250. mag_z_ut ();
}
float die_temp_c() تُرجع درجة حرارة قالب المستشعر بوحدات C.
/* Read the IMU data */
if (mpu9250.Read()) {
float temp = mpu9250. die_temp_c ();
}
تعمل هذه الفئة مع مستشعر MPU-6500.
يتطلب المُنشئ الافتراضي Mpu6500() ، استدعاء طريقة التكوين لإعداد ناقل I2C أو SPI وعنوان I2C أو دبوس تحديد شريحة SPI.
Mpu6500(i2c_t3 *bus, I2cAddr addr) يقوم بإنشاء كائن Mpu6500. يتم استخدام هذا المُنشئ لواجهة اتصال I2C. يتم تمرير مؤشر إلى كائن ناقل I2C مع عنوان I2C الخاص بالمستشعر. سيكون العنوان I2C_ADDR_PRIM (0x68) إذا كان طرف AD0 مؤرضًا وI2C_ADDR_SEC (0x69) إذا تم سحب طرف AD0 عاليًا.
Mpu6500 mpu6500 (&Wire, bfs::Mpu6500::I2C_ADDR_PRIM);
Mpu6500(SPIClass *bus, uint8_t cs) يقوم بإنشاء كائن Mpu6500. يتم استخدام هذا المنشئ لواجهة اتصال SPI. يتم تمرير مؤشر إلى كائن ناقل SPI مع دبوس تحديد الشريحة الخاص بالمستشعر. يمكن استخدام أي طرف قادر على الإدخال/الإخراج الرقمي كدبوس تحديد شريحة.
Mpu6500 mpu6500 (&SPI, 2 );
void Config(TwoWire *bus, const I2cAddr addr) يعد هذا مطلوبًا عند استخدام المنشئ الافتراضي وإعداد ناقل I2C وعنوان I2C. سيكون العنوان I2C_ADDR_PRIM (0x68) إذا كان طرف AD0 مؤرضًا وI2C_ADDR_SEC (0x69) إذا تم سحب طرف AD0 عاليًا.
void Config(SPIClass *spi, const uint8_t cs) يعد هذا مطلوبًا عند استخدام المُنشئ الافتراضي وإعداد ناقل SPI ودبوس تحديد الشريحة.
bool Begin() يقوم بتهيئة الاتصال مع المستشعر وتكوين نطاقات المستشعر الافتراضية ومعدلات أخذ العينات وإعدادات مرشح التمرير المنخفض. نطاق مقياس التسارع الافتراضي هو +/- 16 جم ونطاق الجيروسكوب الافتراضي هو +/- 2000 درجة/ثانية. معدل أخذ العينات الافتراضي هو 1000 هرتز ويتم ضبط مرشح التردد المنخفض على تردد قطع قدره 184 هرتز. يتم إرجاع True إذا كان من الممكن إنشاء الاتصال مع المستشعر واكتمال التكوين بنجاح، وإلا فسيتم إرجاع false. لم تتم تهيئة ناقل الاتصال داخل هذه المكتبة ويجب تهيئته بشكل منفصل؛ وهذا يعزز التوافق مع أجهزة الاستشعار الأخرى الموجودة على نفس الناقل.
Wire.begin();
Wire.setClock( 400000 );
bool status = mpu6500.Begin();
if (!status) {
// ERROR
}
bool EnableDrdyInt() يمكّن مقاطعة البيانات الجاهزة. سيتم تشغيل مقاطعة 50 US على دبوس MPU-9250 INT عندما تكون بيانات IMU جاهزة. هذه المقاطعة نشطة عالية. تُرجع هذه الطريقة صحيحًا إذا تم تمكين المقاطعة بنجاح، وإلا فسيتم إرجاع خطأ.
bool status = mpu6500.EnableDrdyInt();
if (!status) {
// ERROR
}
bool DisableDrdyInt() يعطل مقاطعة البيانات الجاهزة. تُرجع هذه الطريقة صحيحًا إذا تم تعطيل المقاطعة بنجاح، وإلا فسيتم إرجاع خطأ.
bool status = mpu6500.DisableDrdyInt();
if (!status) {
// ERROR
}
bool ConfigAccelRange(const AccelRange range) يضبط النطاق الكامل لمقياس التسارع. الخيارات هي:
يتراوح | قيمة التعداد |
---|---|
+/- 2 جرام | ACCEL_RANGE_2G |
+/- 4 جرام | ACCEL_RANGE_4G |
+/- 8 جرام | ACCEL_RANGE_8G |
+/- 16 جرام | ACCEL_RANGE_16G |
يتم إرجاع True عند ضبط نطاق مقياس التسارع بنجاح، وإلا فسيتم إرجاع false. النطاق الافتراضي هو +/-16 جرام.
bool status = mpu6500.ConfigAccelRange(bfs::Mpu6500::ACCEL_RANGE_4G);
if (!status) {
// ERROR
}
AccelRange Accel_range() يُرجع نطاق مقياس التسارع الحالي.
AccelRange range = mpu6500.accel_range();
bool ConfigGyroRange(const GyroRange range) يضبط نطاق النطاق الكامل للجيروسكوب. الخيارات هي:
يتراوح | قيمة التعداد |
---|---|
+/- 250 درجة/ثانية | GYRO_RANGE_250DPS |
+/- 500 درجة/ثانية | GYRO_RANGE_500DPS |
+/- 1000 درجة/ثانية | GYRO_RANGE_1000DPS |
+/- 2000 درجة/ثانية | GYRO_RANGE_2000DPS |
يتم إرجاع True عند ضبط نطاق الجيروسكوب بنجاح، وإلا فسيتم إرجاع false. النطاق الافتراضي هو +/-2000 درجة/ثانية.
bool status = mpu6500.ConfigGyroRange(bfs::Mpu6500::GYRO_RANGE_1000DPS);
if (!status) {
// ERROR
}
GyroRange gyro_range() يُرجع نطاق الجيروسكوب الحالي.
GyroRange range = mpu6500.gyro_range();
bool ConfigSrd(const uint8_t srd) يضبط مقسم معدل عينة المستشعر. يقوم MPU-9250 باختبار مقياس التسارع والجيروسكوب بمعدل بالهرتز يتم تحديده بواسطة:
إعداد srd بقيمة 0 يعني أن MPU-9250 يقوم باختبار مقياس التسارع والجيروسكوب عند 1000 هرتز. سيؤدي إعداد srd من 4 إلى ضبط أخذ العينات عند 200 هرتز. ترتبط المقاطعة الجاهزة لبيانات IMU بالمعدل المحدد بواسطة مقسم معدل العينة. يتم أخذ عينات من مقياس المغناطيسية عند 100 هرتز لقيم مقسم معدل العينة المقابلة لـ 100 هرتز أو أكثر. خلاف ذلك، يتم أخذ عينات من مقياس المغنطيسية عند 8 هرتز.
يتم إرجاع True عند تعيين مقسم معدل العينة بنجاح، وإلا فسيتم إرجاع false. قيمة مقسم معدل العينة الافتراضية هي 0، مما يؤدي إلى معدل عينة يبلغ 1000 هرتز.
/* Set sample rate divider for 50 Hz */
bool status = mpu6500.sample_rate_divider( 19 );
if (!status) {
// ERROR
}
uint8_t srd() إرجاع قيمة مقسم معدل العينة الحالي.
uint8_t srd = mpu6500.srd();
bool ConfigDlpfBandwidth(const DlpfBandwidth dlpf) يضبط تردد القطع لمرشح التمرير المنخفض الرقمي لمقياس التسارع والجيروسكوب ومستشعر درجة الحرارة. عروض النطاق الترددي المتاحة هي:
عرض النطاق الترددي DLPF | قيمة التعداد |
---|---|
184 هرتز | DLPF_BANDWIDTH_184HZ |
92 هرتز | DLPF_BANDWIDTH_92HZ |
41 هرتز | DLPF_BANDWIDTH_41HZ |
20 هرتز | DLPF_BANDWIDTH_20HZ |
10 هرتز | DLPF_BANDWIDTH_10HZ |
5 هرتز | DLPF_BANDWIDTH_5HZ |
يتم إرجاع True عند ضبط مرشحات التمرير المنخفض الرقمية بنجاح، وإلا يتم إرجاع false. عرض النطاق الترددي الافتراضي هو 184 هرتز.
bool status = mpu6500.ConfigDlpfBandwidth(bfs::Mpu6500::DLPF_BANDWIDTH_20HZ);
if (!status) {
// ERROR
}
DlpfBandwidth dlpf_bandwidth() يُرجع إعداد النطاق الترددي الحالي لمرشح التمرير المنخفض الرقمي.
DlpfBandwidth dlpf = mpu6500.dlpf_bandwidth();
bool Read() يقرأ البيانات من MPU-6500 ويخزن البيانات في كائن Mpu6500. يُرجع صحيحًا إذا تمت قراءة البيانات بنجاح، وإلا يُرجع خطأ.
/* Read the IMU data */
if (mpu6500.Read()) {
}
bool new_imu_data() يُرجع صحيحًا إذا تم إرجاع بيانات جديدة من مقياس التسارع والجيروسكوب.
if (mpu6500.Read()) {
bool new_data = mpu6500. new_imu_data ();
}
float accel_x_mps2() يُرجع بيانات مقياس التسارع x من كائن Mpu6500 بوحدات m/s/s. توجد طرق مماثلة لبيانات المحور y وz.
/* Read the IMU data */
if (mpu6500.Read()) {
float ax = mpu6500. accel_x_mps2 ();
float ay = mpu6500. accel_y_mps2 ();
float az = mpu6500. accel_z_mps2 ();
}
float gyro_x_radps() تُرجع بيانات x gyro من كائن Mpu6500 بوحدات rad/s. توجد طرق مماثلة لبيانات المحور y وz.
/* Read the IMU data */
if (mpu6500.Read()) {
float gx = mpu6500. gyro_x_radps ();
float gy = mpu6500. gyro_y_radps ();
float gz = mpu6500. gyro_z_radps ();
}
float die_temp_c() تُرجع درجة حرارة قالب المستشعر بوحدات C.
/* Read the IMU data */
if (mpu6500.Read()) {
float temp = mpu6500. die_temp_c ();
}
تقوم هذه المكتبة بتحويل جميع البيانات إلى نظام محور مشترك قبل إعادتها. يظهر نظام المحور هذا أدناه. إنه نظام إحداثي أيمن مع محور Z موجب للأسفل، وهو شائع في ديناميكيات الطائرات.
حذر! يظهر نظام المحور هذا بالنسبة إلى مستشعر MPU-6500 وMPU-9250. قد يتم تدوير المستشعر بالنسبة إلى لوحة الاختراق.